Выравнивание номеров версий сборки с помощью номера сборки TFS - PullRequest
13 голосов
/ 13 февраля 2009

Мне интересно, есть ли способ синхронизации номеров сборок (20080213.1) без использования BuildNumberOverrideTarget, где мне пришлось бы генерировать свой собственный номер сборки? Я в основном хочу использовать генератор встроенных чисел tfs по умолчанию / встроенный, но хочу получить к нему доступ для выравнивания моих версий сборки с ним. Можно ли это сделать, и это разумный способ сделать это таким образом?

Ответы [ 2 ]

10 голосов
/ 13 февраля 2009

То, что вы просите, очень разумно, и есть несколько способов достичь этого.

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

Для получения дополнительной информации о том, как мне нравится это делать, взгляните на вики TFS Build Recipies:

или мой пост в блоге по теме

Надеюсь, это поможет,

Martin.

8 голосов
/ 13 февраля 2009

Да, вы можете. В какой-то момент, возможно, в 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 &quot;AssemblyInfo.cs&quot; -r"
          WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/>

редактирует их и заменяет версию файла на $ (BuildNumber):

<File.Replace Path="%(AssemblyInfos.FullPath)"
                  NewValue="AssemblyFileVersion(&quot;$(BuildNumber)&quot;)"
                  RegularExpression="AssemblyFileVersion\(\&quot;(\d+.\d+.\d+.\d+)\&quot;\)"
                  IgnoreCase="true"
                  Force="true"/>

и затем проверяет файлы обратно:

<Exec Command="$(TfCommand) checkin /override:&quot;Automated&quot; /comment:&quot;Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) &quot; /noprompt &quot;AssemblyInfo.cs&quot; /recursive"
          WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/>

Для замены версий файлов я использую задачу File.Replace, которая входит в задачи Microsoft SDC в CodePlex.

Также обратите внимание, что если у вас есть сборка, которая запускается при регистрации, при проверке в файлах AssemblyInfo.cs убедитесь, что комментарий содержит $ (NoCICheckinComment), поскольку это заставляет TFS не запускать другую сборку, в противном случае в конечном итоге в бесконечном цикле сборки.

...