VS.net installs version for several projects in one solution

I am trying to update many different projects in a solution in order to have a new version number. Is there an easy way to synchronize the version number in all fileversion and clickonce options?

Answer

Finally, I solved the problem by writing a small tool:

Sub Main() Try Console.WriteLine("Updating version numbers") Dim strPath As String = System.AppDomain.CurrentDomain.BaseDirectory() Dim strAppName As String = "" Console.WriteLine(strPath) If My.Application.CommandLineArgs.Count > 0 Then Console.WriteLine(My.Application.CommandLineArgs(0)) strPath = My.Application.CommandLineArgs(0) strAppName = My.Application.CommandLineArgs(1) Else strPath = "C:\Projects\APP\" Console.WriteLine("Error loading settings") End If Dim strAssemblyInfoFile As String = strPath + "Properties\AssemblyInfo.cs" If Not File.Exists(strAssemblyInfoFile) Then strAssemblyInfoFile = strPath + "My Project\AssemblyInfo.vb" End If Console.WriteLine("Loading " + strAssemblyInfoFile) Dim strFileContent As String strFileContent = ReadFileText(strAssemblyInfoFile) Dim AssemblyVersionRegex As New Regex("AssemblyVersion(?:Attribute)?\(\s*?""(?<version>(?<major>[0-9]+)\.(?<minor>[0-9]+)\.(?<build>[0-9]+)\.(?<revision>[0-9]+))""\s*?\)") Dim strOldVersion As String = AssemblyVersionRegex.Match(strFileContent).Groups("version").Value Dim oldVersion As New Version(strOldVersion) Dim newVersion As New Version(oldVersion.Major.ToString + "." + oldVersion.Minor.ToString + "." + oldVersion.MajorRevision.ToString + "." + (oldVersion.MinorRevision + 1).ToString) Dim strNewVersion As String = newVersion.ToString() Console.WriteLine("Newversion " + strNewVersion) 'Replace oldversion to newversion strFileContent = strFileContent.Replace(strOldVersion, strNewVersion) File.WriteAllText(strAssemblyInfoFile, strFileContent) Dim strProjectFile As String = strPath + strAppName + ".csproj" If Not File.Exists(strProjectFile) Then strProjectFile = strPath + strAppName + ".vbproj" End If Console.WriteLine("Loading " + strProjectFile) strFileContent = File.ReadAllText(strProjectFile) strFileContent = strFileContent.Replace(strOldVersion, strNewVersion) Dim strOld As String = "<ApplicationRevision>" + oldVersion.MinorRevision.ToString() + "</ApplicationRevision>" Dim strNew As String = "<ApplicationRevision>" + (oldVersion.MinorRevision + 1).ToString() + "</ApplicationRevision>" strFileContent = strFileContent.Replace(strOld, strNew) SaveFile(strProjectFile, strFileContent) Console.WriteLine("Done") Catch ex As Exception Console.WriteLine(ex.Message) End Try End Sub Function ReadFileText(ByVal strFilePath As String) As String Return File.ReadAllText(strFilePath) End Function Sub SaveFile(ByVal strFilePath As String, ByVal strData As String) File.WriteAllText(strFilePath, strData) End Sub 
+4
source share
1 answer

I usually store the assembly version attributes in a separate AssemblyVersion.cs file and put it in the root folder of my solution.

Then I associate the file with each project :

  • Project context menu and select "Add Existing Item"
  • Select a file from the root folder
  • Click on the drop-down menu next to the "Add" button and select "Add as link"

Unfortunately, I did not find in MSBuild a clean way to automatically generate version numbers before compiling the solution. (I believe that MSBuild has events for only one project, and not for a solution - maybe someone else knows the update there: see here for pre-build events for a solution via msbuild )

Instead, I use nant to compile the solution and use the asminfo task to create the AssemblyVersion.cs file.

+5
source

All Articles