Как использовать Msbuild.Community.Tasks.Version в файле csproj

Я хочу использовать VersionTask из Задач сообщества MSBuild, чтобы установить тип вычисления Revision. Тем не менее, мне трудно понять, как на самом деле подключить задачу в моем файле csproj.

В проекте есть AssemblyInfo.cs, для которого определен следующий атрибут:

[assembly: AssemblyVersion("3.2.5.*")]

Что я хочу сделать, так это переопределить генерацию обработки номера ревизии с помощью моей собственной пользовательской обработки.

Я поместил настроенную задачу Version в файл csproj следующим образом:

<UsingTask TaskName="MyCo.Build.Tasks.Version" AssemblyFile="$(SolutionDir)\..\Build\.build\MyCo.Build.Tasks.dll" />

Фактическая задача затем вызывается следующим образом:

  <Target Name="BeforeBuild">
<Message Text="Setting Revision Number to $(BuildNumber)" />
<MyCo.Build.Tasks.Version RevisionType="BuildServerNumber" Revision="$(BuildNumber)" /></Target>

Я вижу, что целевой BeforeBuild вызывается из-за Задачи сообщений, но исполняемый файл все еще имеет стандартную сгенерированную нумерацию следующим образом: Версия файла: 3.2.5.27547

Я ожидал что-то вроде 3.2.5.111 (номер сборки, передаваемый в MSBuild в качестве параметра).

Поскольку задача Version переопределяет обработку по умолчанию значения '*' для Revision, я не думаю, что необходимо на самом деле изменять файл AssemblyInfo.cs.

Нужно ли передавать выходное значение из задачи "Версия" в параметр MSBuild? Мне действительно нужно использовать задачу AssemblyVersion для обновления значений в файле?

Очевидно, что я пытаюсь избежать изменения AssemblyInfo.cs, я просто хочу переопределить обработку номера версии.

Может кто-нибудь посоветовать, пожалуйста?

РЕДАКТИРОВАТЬ: я только что нашел следующий пример использования в файле chm из установщика, который частично отвечает на мой вопрос.

           <Version BuildType="Automatic" RevisionType="Automatic" Major="1" Minor="3" >
            <Output TaskParameter="Major" PropertyName="Major" />
            <Output TaskParameter="Minor" PropertyName="Minor" />
            <Output TaskParameter="Build" PropertyName="Build" />
            <Output TaskParameter="Revision" PropertyName="Revision" />
        </Version>
        <Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)"/>

Однако, когда я запускаю сборку, я могу вывести сгенерированную версию сборки в задаче сообщения, но исполняемый файл по-прежнему имеет ревизию по умолчанию, как и раньше

2 ответа

Решение

Я получил разрешение на это здесь: Как переопределить номер ревизии

В конце мне пришлось обновить файл AssemblyInfo для каждого проекта во время сборки. Поэтому на сервере сборки (TeamCity) я поместил нужный мне код в файл Microsoft.Common.targets, чтобы он не требовался в каждом объявлении проекта, а затем передал номер выпуска и номер сборки TeamCity для каждой задачи сборки.

Редакция - это количество дней с 01.01.2000, когда вы установили его на Автоматический - вы можете указать свою собственную "StartDate", если хотите.

Другие вопросы по тегам