Как автоматически установить версию сборки во время ночной сборки?

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

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

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

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

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

Ответы

Ответ 1

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

[assembly: AssemblyVersion("1.0.9.10")]

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

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

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

Подробнее о AssemblyVersion vs AssemblyFileVersion см. ниже:

Каковы различия между AssemblyVersion, AssemblyFileVersion и AssemblyInformationalVersion?

Ответ 2

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

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

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

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

Ответ 3

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

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

например.

[assembly: AssemblyVersion("1.0.3.10")]

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

Ответ 4

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

текст ссылки