Выравнивание номеров версий сборки с номером сборки TFS

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


person Fadeproof    schedule 13.02.2009    source источник


Ответы (2)


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

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

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

или мое сообщение в блоге по теме

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

Мартин.

person Martin Woodward    schedule 13.02.2009
comment
Спасибо, Мартин. Я уже наткнулся на ваш отличный пост о выравнивании и использовал этот метод. Когда вы говорите, что хотите использовать известный номер версии в сборках для разработчиков, вы имеете в виду, что это будут те, которые указаны в файле информации о сборке без каких-либо переопределений? скажем 1.0.0.0? - person Fadeproof; 16.02.2009
comment
Для разработчиков: вы используете только сборку VS или скрипты сборки, которые разработчики должны использовать на своих рабочих станциях? - person Fadeproof; 16.02.2009
comment
Для разработчиков я использую только сборку VS. Я иногда использую сборки Developer Workstation с использованием сценария TeamBuild, однако сборки VS, как правило, могут выполнять работу в 90% случаев и значительно упрощают работу. В ответ на ваш предыдущий комментарий я действительно использую 1.0.0.0 в файлах AssemblyInfo. - person Martin Woodward; 17.02.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, которая поставляется с задачами SDC на CodePlex. .

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

person Ray Booysen    schedule 13.02.2009
comment
Как получить сборку и ревизию из $ (BuildNumber), поскольку он по умолчанию имеет формат MyBuildDefinition_20090213.1? - person Fadeproof; 13.02.2009
comment
Вы можете написать специальную задачу, чтобы вырезать часть MyBuildDefinition_ и удалить ее. - person Ray Booysen; 13.02.2009