Return to Snippet

Revision: 25056
at March 18, 2010 15:33 by deepsoul


Initial Code
#!/usr/bin/perl -w

use strict;

my $targetver= 9;
my %veryear= ( 8 => 2003, 9 => 2005, 10 => 2008 );
my $year= $veryear{$targetver};
my $projver= $targetver - 1;

sub downsln
{
  my ($fname)= @_;

  if( ! open IN, "<$fname" ) {
    print STDERR "Could not open $fname: $!\n";
    return;
  }
  local $/;
  my $data= <IN>;
  close IN;
  print "Downgrading $fname...\n";
  $data =~ s/((?:^|\n).*\bVisual Studio\b.*\bFormat Version\b.*?)\d+\.\d+/$1$tar
getver.00/
        or print STDERR "Could not replace version number in $fname\n";
  $data =~ s/\n\#\s+Visual .*20\d\d/\n\# Visual Studio $year/
        or print STDERR "Could not replace release year in $fname\n";
  if( rename($fname, "$fname.down") && open(OUT, ">$fname") ) {
    print OUT $data;
    close OUT;
  }
  else {
    print STDERR "Could not rename / write $fname.\n";
  }
  my @projs= $data =~ /\nProject.*?=.*?,\s*\"([^"]+)\"/g;
  my $basedir= $fname;
  $basedir =~ s![^/]*$!!;
  for (@projs) {
    downproj($basedir . $_, $fname);
  }
}


sub downproj
{
  my ($fname, $slnname)= @_;

  if( ! open IN, "<$fname" ) {
    print STDERR "Could not open $fname: $!\n";
    return;
  }
  local $/;
  my $data= <IN>;
  close IN;
  print "Downgrading $fname...\n";
  $data =~ s/\n(\s*Version\s*=\s*\")\d+([,.])\d+\"/\n$1$projver${2}00\"/
        or print STDERR "Could not replace version number in $fname\n";
  if( rename($fname, "$fname.down") && open(OUT, ">$fname") ) {
    print OUT $data;
    close OUT;
  }
  else {
    print STDERR "Could not rename / write $fname.\n";
  }
}


for my $arg (@ARGV)
{
  $arg =~ s/\\/\//g;
  $arg =~ s/^([a-z]):\//\/cygdrive\/$1\//i;
  if( $arg =~ /\.sln$/ ) {
    downsln($arg);
  }
  else {
    downproj($arg);
  }
}

Initial URL

                                

Initial Description
Some (all?) Visual Studio projects can be opened with older versions without problems once their version numbers have been reduced.  The following Perl script does this; it also recurses over the projects contained in a project folder (.sln) file.  It saves you upgrading all your installations.

Initial Title
Downgrade Visual Studio project

Initial Tags

                                

Initial Language
Perl