Создание версии сборки TeamCity Version.NET
Сейчас наши сборки имеют номер версии, такой как 2.0.831.0. Насколько я понимаю, это основная версия, младшая версия, дата и номер сборки. Если я вношу изменения и строю в тот же день, то 2.0.831.1, 2.0.831.2 и т.д.
Формат номера сборки TeamCity - это просто 2. {0}, где {0} - это число с автоматическим добавлением, которое продолжается вечно (2.195, 2.196 и т.д.).
Как заставить TeamCity выглядеть точно так же, как версия сборки? Мы хотим иметь возможность связать журнал изменений с версией сборки, чтобы каждый мог сказать, что версия сборки 2.0.831.2 имела эти изменения в этих файлах.
Дополнительная информация:
На этапе сборки используется опция "Visual Studio (sln)" вместо "MSBuild", если это имеет значение.
Если это имеет значение, мы используем Subversion для управления версиями.
Наша версия TeamCity - 6.5.1 (сборка 17834).
Ответы
Ответ 1
Я бы рекомендовал вам принять семантическую схему управления версиями {major}.{minor}.{patch}
и добавить 4-й элемент для номера сборки {major}.{minor}.{patch}.{build}
.
Это более полезно, если включить дату сборки в схему управления версиями.
TeamCity 6.5 (вы не указали версию) имеет функцию сборки, которая может быть использована для исправления версии в AssemblyInfo.cs во время сборки. См. Документацию для AssemblyInfo Patcher.
![AssemblyInfo patcher dialog (TeamCity documentation)]()
Затем вы можете определить формат номера сборки так, как вы хотели бы иметь в своей сборке, и использовать формат самой сборки, а также для функции исправления.
Ответ 2
Одним из решений является использование бегуна MSBuild и запись MSBuild script, который считывает информацию о версии из файла AssemblyInfo, устанавливает версию сборки TeamCity на это значение во время выполнения сборки, а затем увеличивает часть номера сборки этого версии и записывает значение обратно в AssemblyInfo.
Это не особенно тривиально, так как вам нужно понимать, как писать пользовательские сценарии MSBuild, и вам, вероятно, потребуется использовать некоторые из задач сообщества и т.д., чтобы читать/записывать информацию о версии.
Мы также используем концепцию глобального файла AssemblyInfo, с которым ссылаются все наши сборки (используя Add Link в VS), и поэтому нам нужно только обновить один файл во время сборки.
Здесь есть отличная статья в которой описывается выполнение общих задач CI с помощью MSBuild. Он использует CruiseControl.NET, но многое из этого по-прежнему применяется. Если вы используете TeamCity 6.5, я бы рассмотрел использование его функций сборки исключительно, так как это будет намного проще в обслуживании, чем пользовательский MSBuild script.