Подтвердить что ты не робот

Создание TeamCity для интеграции номера сборки Subversion в версию сборки

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

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

"Учебники" Я нахожу, что все говорят: "Просто добавьте это в script", но они не говорят, что script, а "this" обычно ссылается на задачу AssemblyInfo из расширений сообщества MSBuild.

Нужно ли мне каким-то образом создать пользовательский MSBuild script? Является ли "script" таким же, как файл решения или файл проекта С#?

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

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


Вот что я закончил:

  • Установите Задачи сообщества MSBuild
  • Отредактируйте файл .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">
    

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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