Как автоматически установить версию сборки во время ночной сборки? - PullRequest
13 голосов
/ 27 июля 2010

У нас есть ночной процесс сборки, который автоматически версии всех проектов C ++. Вот как это работает. Существует общий заголовочный файл VersionNumber.h, в котором есть номер #define для номера версии. Ночная сборка проверяет этот файл, увеличивает целое число за этим #define и проверяет его. Все проекты Visual C ++ #include, которые содержат заголовок в своих файлах ресурсов и используют, которые определяют для указания версии (версия - что-то вроде 1.0.3.ThatNumber ).

Пока все хорошо. Теперь я хотел бы иметь то же самое для библиотек классов C #, собранных в той же ежедневной сборке. В настоящее время все они имеют

[assembly: AssemblyVersion("1.0.*")]

в файлах и библиотеках AssemblyInfo.cs заканчивается 1.0.HorribleNumber.AnotherHorribleNumber в качестве версии, и эти два числа не соответствуют числу, используемому в проектах C ++.

Как я могу использовать одинаковую детерминированную автоматическую нумерацию версий в моих проектах на C # с минимальными усилиями?

Ответы [ 4 ]

12 голосов
/ 27 июля 2010

Во-первых, вы можете указать полную версию следующим образом:

[assembly: AssemblyVersion("1.0.9.10")]

Во-вторых, общий подход, чтобы сделать это немного более простым (и повторяет ваш подход C ++), состоит в том, чтобы иметь один файл Version.cs.(имя неважно), которое находится в общем месте, в котором есть атрибуты версии.Затем вы можете добавить этот файл как ссылку во все ваши проекты cs, не забывая удалить атрибуты версии из ваших файлов AssemblyInfo.cs.Таким образом, у вас есть только один файл для обновления (до запуска вашей сборки).Вы также можете поместить в свой файл Version.cs другие общие атрибуты сборки, такие как: NeutralResourcesLanguage или CLSCompliant.

Если вы не используете один подход "Version.cs", то вы можете рекурсивно работать с исходным кодомструктуры каталогов и обновляйте файлы AssemblyInfo отдельно (перед запуском сборки).

Возможно, это не относится к вам, но номера версий (в AssemblyVersion) имеют максимальный диапазон 16 бит.Я видел, как это стало проблемой, когда даты были использованы для этих чисел.Если вы хотите иметь больше широты, то AssemblyFileVersion не имеет этих ограничений, а предназначена исключительно для информационных целей только в .Net, а не как часть идентификатора сборки.Обычно для AssemblyVersion и AssemblyFileVersion устанавливаются одинаковые значения, поскольку некоторые инструменты отображают их комбинации.

Подробнее о AssemblyVersion и AssemblyFileVersion см. В следующих документах:

В чем различия между AssemblyVersion, AssemblyFileVersion и AssemblyInformationalVersion?

2 голосов
/ 27 июля 2010

Мы используем FinalBuilder для автоматизированных сборок (мы называем это TeamCity), и он выполняет такие вещи автоматически (т.е. он может получить номер сборки из другого места (ini-файл, переменная окружения, командная строка и т. Д.), А затемобновите все версии сборки для вас с номером сборки.)

Очевидно, что это не единственный способ сделать это, но если вы еще не использовали что-то вроде FinalBuilder, то попробуйте - наш опыт - вы начинаетеинтересно, почему вы раньше так долго умели с Makefiles и пакетными файлами ...

Но если вы не хотите этого делать, можете ли вы получить тот же процесс, который генерирует / изменяет файл VersionNumber.hтакже выплевывать VersionNumber.cs, с строкой AssemblyVersion в нем?Затем вы можете просто включить этот файл в свой проект.

Директива AssemblyVersion не обязательно должна находиться в том же файле, что и все остальные компоненты AssemblyInfo.

1 голос
/ 27 июля 2010

Вы можете сделать то же самое, что уже делали для своей техники C ++, но найдите строку "assembly: AssemblyVersion( и замените число в кавычках на полный требуемый номер версии.

В C # подстановочный знак на номере версии указывает компилятору автоматически обновлять номер версии - если нет подстановочного знака, он просто использует предоставленный полный номер.

, например

[assembly: AssemblyVersion("1.0.3.10")]

Всегда будет использовать этот номер версии, пока вы не измените его в файле.

0 голосов
/ 27 июля 2010

Вы можете установить версию сборки из другого файла, добавив ссылку на него. Аналогичное решение

текст ссылки

...