I wrote this script to update all the AssemblyInfo.cs files in a Visual Studio solution, to have the same version number. This is the kind of thing I would have used Perl to do, in the past. But Powershell's got this covered nicely.
[ 23 April 2008 - 1150am PST - I updated the script to deal with the AssemblyInfo.vb files in a VB project, and also to deal with version numbers that have less than 4 digits. Thanks for the suggestion, Jason! ]
Maybe someone can learn from this.
# SetVersion.ps1 # # Set the version in all the AssemblyInfo.cs or AssemblyInfo.vb files in any subdirectory. # # usage: # from cmd.exe: # powershell.exe SetVersion.ps1 2.8.3.0 # # from powershell.exe prompt: # .\SetVersion.ps1 2.8.3.0 # # last saved Time-stamp: <Wednesday, April 23, 2008 11:46:40 (by dinoch)> # function Usage { echo "Usage: "; echo " from cmd.exe: "; echo " powershell.exe SetVersion.ps1 2.8.3.0"; echo " "; echo " from powershell.exe prompt: "; echo " .\SetVersion.ps1 2.8.3.0"; echo " "; } function Update-SourceVersion { Param ([string]$Version) $NewVersion = 'AssemblyVersion("' + $Version + '")'; $NewFileVersion = 'AssemblyFileVersion("' + $Version + '")'; foreach ($o in $input) { Write-output $o.FullName $TmpFile = $o.FullName + ".tmp" get-content $o.FullName | %{$_ -replace 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)', $NewVersion } | %{$_ -replace 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)', $NewFileVersion } > $TmpFile move-item $TmpFile $o.FullName -force } } function Update-AllAssemblyInfoFiles ( $version ) { foreach ($file in "AssemblyInfo.cs", "AssemblyInfo.vb" ) { get-childitem -recurse |? {$_.Name -eq $file} | Update-SourceVersion $version ; } } # validate arguments $r= [System.Text.RegularExpressions.Regex]::Match($args[0], "^[0-9]+(\.[0-9]+){1,3}$"); if ($r.Success) { Update-AllAssemblyInfoFiles $args[0]; } else { echo " "; echo "Bad Input!" echo " "; Usage ; }