Как автоматически установить версию сборки во время ночной сборки?
У нас есть ночной процесс сборки, который автоматически обновляет все проекты С++. Вот как это работает. Существует общий заголовочный файл 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
Вы можете установить версию сборки из другого файла, добавив к ней ссылку. Аналогичное решение имеет вид
текст ссылки