Выравнивание номеров версий сборки с помощью TFS Buildnumber
Мне интересно, есть ли способ синхронизировать номера сборки (20080213.1) без использования BuildNumberOverrideTarget, где мне нужно было бы создать свой собственный номер сборки? Я в основном хочу использовать встроенный генератор tfs buildnumber по умолчанию/встроенный, но хочу получить к нему доступ, чтобы выровнять с ним свои версии сборки. Можно ли это сделать и разумно ли это сделать таким образом?
Ответы
Ответ 1
То, о чем вы просите, очень разумно, и есть несколько способов добиться этого.
Лично, когда я это делаю, мне не нравится проверять файлы на управление версиями, в которых есть номер сборки, сгенерированный в них - это просто вводит слишком много головных болей при слиянии кода между ветвями, но также мне нравится известный номер версии, который будет использоваться, когда разработчик создает сборку рабочей станции и сборку собственного сервера сборки, чтобы сделать их очень легко отличить друг от друга.
Для получения дополнительной информации о том, как мне это нравится, ознакомьтесь с вики-версией TFS Build Recipies:
или мое сообщение в блоге по теме
Надеюсь, что это поможет,
Martin.
Ответ 2
Да, вы можете. В какой-то момент, возможно, в AfterGet, вы можете использовать BuildNumber и создать настраиваемую задачу для обновления файлов AssemblyInfo.cs в исходном коде.
Мы подключились к AfterGet и заставили нашу цель зависеть:
<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" />
Наш объект VersionAssemblies Target извлекает все файлы AssemblyInfo.cs из $(SolutionRoot):
<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;">
<Output TaskParameter="Include" ItemName="AssemblyInfos"/>
</CreateItem>
проверяет их:
<Exec Command="$(TfCommand) checkout "AssemblyInfo.cs" -r"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/>
редактирует их и заменяет версию файла $(BuildNumber):
<File.Replace Path="%(AssemblyInfos.FullPath)"
NewValue="AssemblyFileVersion("$(BuildNumber)")"
RegularExpression="AssemblyFileVersion\(\"(\d+.\d+.\d+.\d+)\"\)"
IgnoreCase="true"
Force="true"/>
а затем проверяет файлы обратно:
<Exec Command="$(TfCommand) checkin /override:"Automated" /comment:"Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) " /noprompt "AssemblyInfo.cs" /recursive"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/>
Для замены версий файла я использую задачу File.Replace, которая поставляется с задачами Microsoft > для CodeClex.
Также обратите внимание, что если у вас есть сборка, которая запускается при проверке, при проверке файлов AssemblyInfo.cs, убедитесь, что комментарий включает в себя $(NoCICheckinComment), поскольку это приводит к тому, что TFS не запускает другую сборку, иначе вы закончите в бесконечном цикле сборки.