Я хочу скорректировать вывод от своей конфигурации сборки TeamCity моей библиотеки классов так, чтобы произведенные dll файлы имели следующий номер версии: 3.5.0.x, где x является числом пересмотра подверсии, которое взял TeamCity.
Я нашел, что могу использовать BUILD_NUMBER
переменная среды для получения x но к сожалению я не понимаю то, что еще я должен сделать.
В "учебных руководствах" я нахожу всех, говорится, что "Вы просто добавляете это к сценарию", но они не говорят, какой сценарий, и "это" обычно отсылает к задаче AssemblyInfo от Расширений Сообщества MSBuild.
Я должен создать пользовательский сценарий MSBuild так или иначе для использования этого? Действительно ли "сценарий" является тем же или как файлом решения или как файлом проекта C#?
Я не знаю много о процессе MSBuild вообще, за исключением того, что я могу передать файл решения непосредственно MSBuild, но что я должен добавить к "сценарию", XML, и файл решения решительно не похож на XML.
Так, кто-либо может указать на меня на пошаговое руководство о том, как сделать эту работу?
Это - то, с чем я закончил:
Отредактируйте .csproj файл моей базовой библиотеки классов и измените нижнюю часть так, чтобы это читало:
Измените все мои файлы AssemblyInfo.cs так, чтобы они не указывали или AssemblyVersion или AssemblyFileVersion (ретроспективно, я изучу откладывание AssemblyVersion),
Это теперь обновит GlobalInfo.cs, только если переменная среды, BUILD_NUMBER установлен, который это - когда я создаю через TeamCity.
Я выбрал хранение постоянного AssemblyVersion, так, чтобы ссылки все еще работали и только обновили AssemblyFileVersion, так, чтобы я видел, от какой сборки dll.
Файл CSPROJ фактически является файлом MSBuild.
Выгрузите проект соответствующего класса в VS.NET, отредактируйте его и раскомментируйте цель BeforeBuild
. Добавьте задачу MSBuild FileUpdate
из расширений сообщества MSBuild.
В файле MSBuild вы можете получить BUILD_NUMBER из TeamCity с помощью переменной среды $ (build_vcs_number_1)
. Обратите внимание, что вы можете создать дополнительную конфигурацию для «Производственного» условия, которое вы проверяете, поскольку это, очевидно, не будет работать при локальной сборке.
Просто используйте это как входные данные для свойства ReplacementText
задачи FileUpdate.
Обратите внимание, что если номера ваших ревизий превышают отметку 65535 ( UInt16
), вы не можете использовать его в атрибуте AssemblyVersion
.
Я бы посоветовал вам использовать вместо этого AssemblyInformationalVersion
, которая представляет собой просто строку, не имеющую такого ограничения. Если, конечно, вы не уверены, что не достигнете этой верхней границы ревизии, но это кажется изворотливым способом сделать это.
В качестве альтернативы, вы можете разработать способ (a.b.c.d - номер вашей версии) использования ревизии div 1000 для c и ревизии mod 1000 для d.