Согласование версии TeamCity с версией сборки .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).


person Dzejms    schedule 31.08.2011    source источник
comment
stackoverflow .com / questions / 1041153 /.   -  person sylvanaar    schedule 31.08.2011


Ответы (2)


Я бы порекомендовал вам принять схему семантического управления версиями {major}.{minor}.{patch} и добавить 4-й элемент для номера сборки {major}.{minor}.{patch}.{build}. Это гораздо более полезно, поскольку включает дату сборки в схему управления версиями.

TeamCity 6.5 (вы не указали версию) имеет функцию сборки, которую можно использовать для исправления версии в AssemblyInfo.cs во время сборки. См. Документацию по AssemblyInfo Patcher.

Диалог исправления AssemblyInfo (документация TeamCity)

Затем вы можете определить формат номера сборки так, как вы хотели бы иметь в своей сборке, и использовать формат для самой сборки, а также для функции исправления.

person ccellar    schedule 31.08.2011
comment
Прокомментируйте ccellar как ответ, потому что у меня недостаточно репутации для комментариев. Формат строки версии: major.minor [.build [.revision]] Номер сборки - это 3-й элемент, а не 4-й. Если AssemblyVersion не имеет этого формата, тогда класс Version будет иметь неправильные значения в свойствах Build и Revision. msdn.microsoft.com/en-us/library/system.version. aspx - person jbtibor; 11.01.2013
comment
@jbtibor Хороший аргумент в том, что у Microsoft другая схема номеров версий, но я бы сказал, что схема ccellar имеет больше смысла, и это схема, которую я использую. Подумайте об этом: номер сборки всегда будет уникальным при использовании номера сборки TeamCity, поэтому несколько сборок могут иметь одну и ту же ревизию, но невозможно иметь несколько ревизий в одной сборке, что, по-видимому, подразумевает схема MS. - person Matt Miller; 02.07.2013
comment
Вы можете использовать атрибут AssemblyInformationalVersionAttribute в AssemblyInfo.cs, чтобы указать версию semver (этот атрибут позволит вам указать любую строку в качестве версии). Затем это значение может быть получено и использовано в процессе сборки. Мне нравится идея, что разработчик, прежде чем вносить изменения, должен определить информацию о версии для того, что он / она регистрирует. - person Emil G; 06.02.2015

Одно из решений - использовать средство запуска MSBuild и написать сценарий MSBuild, который считывает информацию о версии из файла AssemblyInfo, устанавливает для версии сборки TeamCity это значение во время выполнения сборки, затем увеличивает часть номера сборки этой версии и записывает значение обратно в AssemblyInfo.

Это не особенно тривиально, так как вам нужно иметь представление о написании пользовательских сценариев MSBuild, и вам, вероятно, придется использовать некоторые задачи сообщества и т. Д. Для чтения / записи информации о версии.

Мы также используем концепцию глобального файла AssemblyInfo, на который ссылаются все наши сборки (с помощью добавления ссылки в VS), и поэтому нам нужно обновить только один файл во время сборки.

здесь, в которой описывается выполнение общих задач CI с помощью MSBuild. Он использует CruiseControl.NET, но многое из этого все еще применимо. Однако, если вы используете TeamCity 6.5, я бы рассмотрел возможность использования исключительно его функций сборки, так как это будет намного проще поддерживать, чем пользовательский сценарий MSBuild.

person devdigital    schedule 31.08.2011
comment
Все это имеет смысл. Есть ли какие-нибудь руководства для этого? Я никогда раньше не работал с MSBuild. У вас есть конкретные примеры? - person Dzejms; 31.08.2011