Укажите номер версии сборки в качестве аргумента командной строки в MSBuild

Я хотел бы указать номер версии для всех сборок, которые будут сгенерированы во время сборки в качестве аргумента команды MSBuild следующим образом:

MSBuild.exe /p:version=5.4.3.0 

Я просмотрел AssemblyInfoTask, но в этом случае мне это не кажется хорошим решением.

Ответ 1

Я использую задачу AssemblyInfo, когда вы все время описываете в своем комментарии.

  <!-- update standard assembly attribute in all projects -->
  <Target Name="BeforeBuild" >
    <Message Text="Updating AssemblyInfo to Version $(VersionNumber)"></Message>
    <Message Text="Writing to AssemblyInfo files in $(SolutionRoot)"></Message>
    <AssemblyInfo AssemblyInfoFiles="@(AssemblyInfoFiles)" 
                  AssemblyCopyright="$(AssemblyCopyright)" 
                  AssemblyVersion="$(VersionNumber)"
                  AssemblyFileVersion="$(VersionNumber)"
                  >
    </AssemblyInfo>
  </Target>

Значение VersionNumber передается из файла проекта MSBuild точно так же, как вы описываете:

  MSBuild <project_file> /p:VersionNumber=<value>;...

Мы используем цель BeforeBuild для обеспечения того, чтобы файлы AssemblyInfo.cs обрабатывались до начала сборки. Это не то, что вы хотите?

Ответ 2

Я знаю, что это старый вопрос, но Google приводит меня сюда как лучший результат.

Я выполнил простое решение в this. Нет необходимости в пакете расширения.

В принципе, вам нужно добавить файлы "BuildCommon.targets" и изменить файл csproj соответственно, чтобы иметь номер версии, указанный в msbuild, например:

msbuild.exe abc.sln /p:Configuration=Release;VersionAssembly=1.2.3.4

Надеюсь, что это поможет.