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

у нас есть процесс автоматической сборки, что автоматически версии все 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")]

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


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

текст ссылки