Как использовать 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", если хотите.