Как автоматически установить версию сборки во время ночной сборки?
у нас есть процесс автоматической сборки, что автоматически версии все c++ проектов. Вот как это работает. Существует общий заголовочный файл VersionNumber.h
конкретной #define
номер версии. Ночная сборка проверяет этот файл, увеличивает целое число за этим #define
и выполняет его. Все проекты Visual C++#include
этот заголовок в свои файлы ресурсов и использовать это определение для указания версии (Версия smth, как 1.0.3.ThatNumber
).
пока все хорошо. Теперь я хочу ... чтобы иметь то же самое для библиотек классов C#, построенных в той же ежедневной сборке. В настоящее время они все
[assembly: AssemblyVersion("1.0.*")]
в AssemblyInfo.cs-файлы и библиотеки заканчиваются 1.0.HorribleNumber.AnotherHorribleNumber
поскольку версия и два числа не коррелируют с числом, используемым проектами C++.
как сделать у меня та же determenistic автоматическая нумерация версий в моих проектах c# с минимальными усилиями?
4 ответов
во-первых, вы можете указать полную версию следующим образом:
[assembly: AssemblyVersion("1.0.9.10")]
во-вторых, общий подход, чтобы сделать это немного более простым (и повторяет ваш подход c++), должен иметь одну версию.cs-файл (имя неважное), который находится в общем расположении, в котором есть атрибуты версии. Вы можете тогда добавить этот файл в качестве ссылки для всех ваших проектов cs, не забывая удалять атрибуты версии из AssemblyInfo.файлы cs. В этом у вас есть только один файл для обновления (перед запуском сборки). Вы также можете поместить другие общие атрибуты сборки в свою версию.cs-файл, такой как: NeutralResourcesLanguage или CLSCompliant.
Если вы не используете одну " версию.подход cs", то вы можете работать рекурсивно через структуру каталогов исходного кода и обновлять файлы AssemblyInfo индивидуально (перед запуском сборки).
это может быть не относится к вам, но номера версий (в AssemblyVersion) имеют максимальный диапазон 16 бит. Я видел, что это стало проблемой, когда даты были использованы для этих чисел. Если вы хотите иметь больше широты, то AssemblyFileVersion не имеет этих ограничений, но исключительно для информационных целей только в .Net, а не часть идентификатора сборки. Обычно для AssemblyVersion и AssemblyFileVersion задаются те же значения, что и для некоторых комбинаций инструментов.
Подробнее см. ниже AssemblyVersion vs AssemblyFileVersion:
каковы различия между AssemblyVersion, AssemblyFileVersion и AssemblyInformationalVersion?
мы используем FinalBuilder для автоматических сборок (у нас есть TeamCity), и он делает это автоматически (т. е. он может получить номер сборки откуда-то еще (ini-файл, переменная среды, командная строка, что угодно), а затем обновить все версии сборки для вас с номером сборки.)
очевидно, не единственный способ сделать это, но если вы не использовали что-то вроде FinalBuilder, то попробуйте-наш опыт - вы начинаете задаваться вопросом, почему вы ранее потратили так долго быть умным с Makefiles и пакетных файлов...
но если вы не хотите этого делать, можете ли вы получить тот же процесс, который генерирует/изменяет VersionNumber.H файл также выплюнуть VersionNumber.cs, с линией AssemblyVersion в ней? Тогда вы можете просто включить этот файл в свой проект.
директива AssemblyVersion не должна находиться в том же файле, что и все остальные материалы AssemblyInfo.
Вы можете сделать что-то вроде того, что вы уже делаете для своей техники C++, но ищите "assembly: AssemblyVersion(
string и замените число в кавычках на полный, необходимый номер версии.
в C# подстановочный знак на номере версии говорит компилятору автоматически обновлять номер версии-если нет подстановочного знака, он будет просто использовать полный номер.
например
[assembly: AssemblyVersion("1.0.3.10")]
всегда будет использовать номер версии, пока вы не измените его в файл.