Мне интересно, есть ли способ синхронизировать номера сборки (20080213.1) без использования BuildNumberOverrideTarget, где мне нужно было бы сгенерировать свой собственный номер сборки? Я в основном хочу использовать стандартный / встроенный генератор tfs buildnumber, но хочу получить к нему доступ, чтобы согласовать с ним мои версии сборки. Можно ли это сделать и разумно ли это сделать?
Выравнивание номеров версий сборки с номером сборки TFS
Ответы (2)
То, что вы просите, очень разумно, и есть несколько способов добиться этого.
Лично, когда я это делаю, мне не нравится проверять файлы в системе управления версиями, в которых есть номер, сгенерированный сервером сборки - это просто вызывает слишком много головных болей при слиянии кода между ветвями, но мне также нравится известный номер версии. будет использоваться, когда разработчик выполняет сборку рабочей станции по сравнению с правильной сборкой, производной от сервера сборки, чтобы их было действительно легко отличить друг от друга.
Для получения дополнительной информации о том, как мне это нравится, загляните в вики-страницу рецептов сборки TFS:
или мое сообщение в блоге по теме
Надеюсь, это поможет,
Мартин.
Да, ты можешь. В какой-то момент, возможно, в AfterGet, вы можете использовать BuildNumber и создать настраиваемую задачу для обновления файлов AssemblyInfo.cs в исходном коде.
Мы подключились к AfterGet и сделали нашу цель зависимой:
<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" />
Наша цель VersionAssemblies извлекает все файлы 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, которая поставляется с задачами SDC на CodePlex. .
Также обратите внимание, что если у вас есть сборка, которая запускается при проверке, при проверке файлов AssemblyInfo.cs убедитесь, что комментарий включает $ (NoCICheckinComment), так как это заставляет TFS не запускать другую сборку, иначе вы попадете в бесконечный цикл сборки.