我试图在一个解决方案中更新许多不同的项目,以获得新的版本号。是否有一种简单的方法来同步所有项目的版本号文件版本和ClickOnce选项?
  
  
   
    回答
   
  
  
   最后通过编写一个小工具解决了这个问题:
  
      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