Я хочу настроить вывод из моей конфигурации сборки TeamCity моей библиотеки классов так, чтобы созданные dll-файлы имели следующий номер версии: 3.5.0.x, где x - это номер редакции subversion, который выбрал TeamCity.
Я обнаружил, что могу использовать переменную окружения BUILD_NUMBER
, чтобы получить x, но, к сожалению, я не понимаю, что еще мне нужно сделать.
Все «учебники», которые я нахожу, говорят «Вы просто добавляете это в скрипт», но они не говорят «1006 *, какой скрипт», а «это» обычно относится к задаче AssemblyInfo из MSBuild. Расширения сообщества.
Нужно ли как-то создавать собственный скрипт MSBuild, чтобы использовать это? Является ли «скрипт» таким же, как файл решения или файл проекта C #?
Я почти ничего не знаю о процессе MSBuild, за исключением того, что могу передать файл решения непосредственно в MSBuild, но мне нужно добавить в «сценарий» XML, а файл решения определенно не выглядит как XML.
Итак, кто-нибудь может подсказать мне пошаговое руководство о том, как заставить это работать?
Вот чем я закончил:
- Установить Задачи сообщества MSBuild
Отредактируйте файл .csproj моей базовой библиотеки классов и измените нижнюю часть так, чтобы она гласила:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
<AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' "
CodeLanguage="CS"
OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs"
AssemblyVersion="3.5.0.0"
AssemblyFileVersion="$(BUILD_NUMBER)" />
</Target>
<Target Name="AfterBuild">
Измените все мои файлы AssemblyInfo.cs, чтобы они не указывали ни AssemblyVersion, ни AssemblyFileVersion (ретроспективно, я рассмотрю вопрос о том, чтобы вернуть AssemblyVersion обратно)
- Добавлена ссылка на теперь глобальный GlobalInfo.cs, который находится за пределами всего проекта
- Убедитесь, что этот файл собран один раз, чтобы у меня был файл по умолчанию в управлении исходным кодом
Теперь это будет обновлять GlobalInfo.cs, только если установлена переменная среды BUILD_NUMBER, как это происходит при сборке через TeamCity.
Я выбрал сохранение постоянной AssemblyVersion, чтобы ссылки продолжали работать, и обновлял только AssemblyFileVersion, чтобы я мог видеть, из какой сборки создана dll.