Подтвердить что ты не робот

Как изменить номер версии сборки с помощью AssemblyInfoTask?

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

Итак, я пошел и установил его, в частности версию 1.0.51130.0.

После установки я вручную добавил тег Import (путем разгрузки каждого проекта) AssemblyInfoTask в файлах .cspoj (решение имеет более 35 файлов proj).

<Import Project="$(MSBuildExtensionsPath)\Microsoft\AssemblyInfoTask\Microsoft.VersionNumber.Targets"/>

Затем я изменил файл Microsoft.VersionNUmber.Target, который будет установлен в пути: C:\Program Files\MSBuild\Microsoft\AssemblyInfoTask, и я изменил следующий раздел:

<!-- Properties for controlling the Assembly Version -->
<PropertyGroup>
    <AssemblyMajorVersion>4</AssemblyMajorVersion>
    <AssemblyMinorVersion>0</AssemblyMinorVersion>
    <AssemblyBuildNumber></AssemblyBuildNumber>
    <AssemblyRevision></AssemblyRevision>
    <AssemblyBuildNumberType>DateString</AssemblyBuildNumberType>
    <AssemblyBuildNumberFormat>01MMdd</AssemblyBuildNumberFormat>
    <AssemblyRevisionType>AutoIncrement</AssemblyRevisionType>
    <AssemblyRevisionFormat>00</AssemblyRevisionFormat>
</PropertyGroup>

<!-- Properties for controlling the Assembly File Version -->  
<PropertyGroup>
    <AssemblyFileMajorVersion>4</AssemblyFileMajorVersion>
    <AssemblyFileMinorVersion>0</AssemblyFileMinorVersion>
    <AssemblyFileBuildNumber></AssemblyFileBuildNumber>
    <AssemblyFileRevision></AssemblyFileRevision>
    <AssemblyFileBuildNumberType>DateString</AssemblyFileBuildNumberType>
    <AssemblyFileBuildNumberFormat>01MMdd</AssemblyFileBuildNumberFormat>
    <AssemblyFileRevisionType>AutoIncrement</AssemblyFileRevisionType>
    <AssemblyFileRevisionFormat>00</AssemblyFileRevisionFormat>
</PropertyGroup>

Затем я установил версию файла assemblyInfo.cs в 1.0.0.0 в каждом проекте. Наконец я сохранил и закрыл его, снова открыл и построил. Он работает как чемпион!

Теперь нужно настроить версию на 4.0.1053.1, где 10 является частью индикатора года, который является 2010 годом, а 53 обозначает номер недели, наконец 1 обозначает номер версии.

Как достичь этого, используя задачу AssemblyInfo? Я столкнулся с несколькими сообщениями о том, что новая версия AssemblyInfo Task доступна в Build Extension Pack.

Я установил MSBuild Extension Pack декабрь 2010, а его версия установщик MSBuild Extension Pack 4.0.2.0

Пожалуйста, помогите.

4b9b3361

Ответ 1

Сначала... используйте globalassemblyinfo.cs, который связан с каждым проектом. Добавьте его как связанный файл в каждый проект. Это означает, что вы обновляете один файл, а не 30 файлов assemblyinfo... затем:

использовать MSBuild.Community.Tasks....

Затем вызовите

<AssemblyInfo CodeLanguage="CS"
         OutputFile="$(VersionFile)"
         AssemblyCompany="Company"
         AssemblyProduct="Product"
         AssemblyCopyright="Copyright © Company 2011"
         ComVisible="false"
         AssemblyVersion="$(BUILD_NUMBER)"
         AssemblyFileVersion="$(BUILD_NUMBER)" />

Предполагая, что у вас есть что-то вроде:

<Import Project=".\tasks\MSBuild.Community.Tasks.Targets"/>

Ответ 2

Я делаю это в Jenkins, имея сборку пакетов, которая параметризуется с использованием типа параметра Tag Subversion Tag. Тег Subversion должен соответствовать формату номера версии (major.minor.revision.build), например. tags/2.0.0.1. Затем имя тега назначается параметру Jenkins, например. $VERSION становится 2.0.0.1

Я использую задачу WriteLinesToFile msbuild для записи атрибута сборки во второй файл вместе с PropertyInfo.cs с именем VersionInfo.cs. Как отмечено в исходном управлении, это просто содержит номер версии по умолчанию:

// Do not change this. The version is set on package builds only by setting the AsmVersion MSBuild property
[assembly: System.Reflection.AssemblyVersion("0.0.0.0")] 

Пакет, построенный на сервере сборки, проходит в версии через параметр AsmVersion:

/p:AsmVersion=$VERSION

Файл .csproj модифицирован, чтобы иметь цель BeforeBuild (Visual Studio создает для вас комментарий):

<Target Name="BeforeBuild">
    <WriteLinesToFile 
        Condition=" '$(AsmVersion)' != '' " File="Properties\VersionInfo.cs" 
        Overwrite="True"
        Lines="[assembly: System.Reflection.AssemblyVersion(&quot;$(AsmVersion)&quot;)] // Generated by build" />   
</Target>

При создании в Visual Studio или без передачи в AsmVersion ваша сборка будет иметь версию по умолчанию 0.0.0.0. При построении сборки пакета вы получите желаемый номер сборки.

Ответ 3

Как я, наконец, получил это для работы MSBuild версии 12 (VS 2013).

  • Используемый Nuget для получения пакета сообщества MSBuildTasks
  • Отредактировал мой .csproj файл и добавил путь к импорту пакета:
<Import Project="..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets" Condition="Exists('..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.target')"/>
  1. Извлеките Regex, чтобы изменить только номер версии в файле AssemblyInfo.cs:
(?<=AssemblyFileVersion\("[0-9]\.[0-9]\.[0-9]\.)(\*)

который не совместим с XML, поэтому его необходимо изменить на:

(?&#60;=AssemblyFileVersion\(&#34;&#91;0-9]\.&#91;0-9]\.&#91;0-9]\.)(\*)
  1. Раскомментировал раздел <Target Name="BeforeBuild"> и добавил следующее:
<Target Name="BeforeBuild">
    <FileUpdate Files="properties\AssemblyInfo.cs"
                Regex="(?&#60;=AssemblyFileVersion\(&#34;&#91;0-9]\.&#91;0-9]\.&#91;0-9]\.)(\*)"
                ReplacementText="$(Revision)" />
</Target>
  1. При запуске MSBuild добавлено свойство "Revision" в командную строку, например.
msbuild.exe myProject.csproj /t:Build /p:Configuration=Release;Revision=12345

Ответ 4

Обновление для файлов .csproj для .NET.NET.. Если вы столкнулись с этим вопросом после перехода на новый формат .csproj, используемый .NET Core, вы можете просто установите свойство Version (не нужно беспокоиться о задачах MSBuild).