Vs.net SET версия для нескольких проектов в одном решении
-
21-09-2019 - |
Вопрос
Я пытаюсь обновить множество различных проектов в решении, чтобы иметь новый номер версии. Есть ли простой способ синхронизировать номер версии во всех параметрах Fileversion и 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
Решение
Обычно я храню атрибуты версии сборки в отдельном Assemblyversion.cs Поместите его в корневую папку моего решения.
Затем я ссылка на сайт файл в каждый проект:
- Контекст-меню на проекте и выберите «Добавить существующий элемент»
- Выберите файл из корневой папки
- Нажмите на раскрывающееся меню рядом с кнопкой «Добавить» и выберите «Добавить как ссылка»
К сожалению, я не нашел чистого способа в MSBuild для автоматического выращивания номера версии перед компиляцией решения. (Я считаю, что MSBuild имеет только события для проекта, а не для решения - Может быть, кто -то еще знает Обновить: видеть Здесь для предварительных событий по всему раствору через MSBuild)
Вместо этого я использую NANT для составления решения и использую Асминфо задача для создания Assemblyversion.cs файл.