2010-01-08 3 views
20

Я хочу настроить вывод из моей конфигурации сборки TeamCity моей библиотеки классов, чтобы полученные файлы DLL имели следующий номер версии: 3.5.0.x, где x номер ревизии подвариантности, который TeamCity подобрал.Создание TeamCity встраивает номер сборки Subversion в версию сборки

Я обнаружил, что могу использовать переменную окружения BUILD_NUMBER, чтобы получить x, но, к сожалению, я не понимаю, что мне еще нужно делать.

В «учебники» Я считаю, все говорят «Вы просто добавьте к этому сценарию», но они не говорят, которые сценарий, и «это», как правило, ссылаясь на задачи AssemblyInfo из MSBuild Community Extensions.

Должен ли я создать собственный скрипт MSBuild, чтобы использовать его? Является ли «скрипт» таким же, как файл решения или файл проекта C#?

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

Итак, может ли кто-нибудь указать мне на пошаговое руководство о том, как сделать эту работу?


Это то, что я закончил с:

  1. УСТАНАВЛИВАЕТЕ MSBuild Community Tasks
  2. Отредактируйте файл .csproj моей основной библиотеки классов, а также изменить основание так, что он читает:

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 
    <Target Name="BeforeBuild"> 
        <AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' " 
         CodeLanguage="CS" 
         OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs" 
         AssemblyVersion="3.5.0.0" 
         AssemblyFileVersion="$(BUILD_NUMBER)" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    

  3. Измените все мои файлы AssemblyInfo.cs, чтобы они не указывали либо AssemblyVersion, либо AssemblyFileVersion (в ретроспективе, я рассмотрю вопрос о сдаче AssemblyVersion)

  4. Добавлена ​​ссылка на глобальную глобальную информацию GlobalInfo.cs, которая расположена только вне всего проекта
  5. убедитесь, что этот файл построен один раз, так что у меня есть файл по умолчанию в системе управления версиями

Это теперь будет обновлять GlobalInfo.cs только если переменная BUILD_NUMBER среды устанавливается, что оно когда я создаю TeamCity.

Я решил сохранить константу AssemblyVersion, так что ссылки все еще работают и обновляют AssemblyFileVersion, поэтому я могу видеть, из какой сборки DLL.

ответ

18

Файл CSPROJ является файлом MSBuild.

Выгрузите соответствующий проект класса в VS.NET, отредактируйте его и раскомментируйте цель BeforeBuild. Добавьте задачу MSBuild FileUpdate из расширения сообщества MSBuild.

В файле MSBuild вы можете получить BUILD_NUMBER из TeamCity с помощью переменной окружения $(build_vcs_number_1). Обратите внимание, что вы можете создать дополнительную конфигурацию для «Production», которую вы проверяете, поскольку это, очевидно, не будет работать при локальном создании.

Просто используйте это как вход для свойства ReplacementText задачи FileUpdate.

Обратите внимание, что если ваши номера версий превышают отметку 65535 (UInt16), вы не можете использовать ее в атрибуте AssemblyVersion.

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

В качестве альтернативы вы можете разработать способ (a.b.c.d, являющийся номером вашей версии) использования ревизии div 1000 для c и версии mod 1000 для d.

12

В TeamCity 6.5 это ОЧЕНЬ ЛЕГКО для достижения использования AssemblyInfo patcher.

  • Перейти к шагу конфигурации сборки 3 «Шаги сборки»;
  • Нажмите «Добавить функцию сборки»;
  • Выберите тип функции «AssemblyInfo patcher»;
  • Укажите, что вы хотите как версию. Я использую: %system.build.number%
+1

К сожалению, их патчер не [в данный момент] (http://confluence.jetbrains.net/display/TCD65/AssemblyInfo+Patcher) позволяют задать различные значения '' AssemblyFileVersion' AssemblyVersion' и , – ladenedge

+1

Ваше предложение очень полезно в сценариях, где основной проблемой является отслеживание номера сборки: спасибо! – faester

+1

Man Я собирался сделать много шаблонов шаблонов только для того, чтобы получить это в моем коде. Ты спас мне 2 или 3 дня работы! –

Смежные вопросы