То, чтобы заставлять TeamCity интегрировать номер сборки Подверсии в версию блока

Я хочу скорректировать вывод от своей конфигурации сборки TeamCity моей библиотеки классов так, чтобы произведенные dll файлы имели следующий номер версии: 3.5.0.x, где x является числом пересмотра подверсии, которое взял TeamCity.

Я нашел, что могу использовать BUILD_NUMBER переменная среды для получения x но к сожалению я не понимаю то, что еще я должен сделать.

В "учебных руководствах" я нахожу всех, говорится, что "Вы просто добавляете это к сценарию", но они не говорят, какой сценарий, и "это" обычно отсылает к задаче AssemblyInfo от Расширений Сообщества MSBuild.

Я должен создать пользовательский сценарий MSBuild так или иначе для использования этого? Действительно ли "сценарий" является тем же или как файлом решения или как файлом проекта C#?

Я не знаю много о процессе MSBuild вообще, за исключением того, что я могу передать файл решения непосредственно MSBuild, но что я должен добавить к "сценарию", XML, и файл решения решительно не похож на XML.

Так, кто-либо может указать на меня на пошаговое руководство о том, как сделать эту работу?


Это - то, с чем я закончил:

  1. Установите задачи сообщества MSBuild
  2. Отредактируйте .csproj файл моей базовой библиотеки классов и измените нижнюю часть так, чтобы это читало:

    
    
    
      
    
    
    

  3. Измените все мои файлы AssemblyInfo.cs так, чтобы они не указывали или AssemblyVersion или AssemblyFileVersion (ретроспективно, я изучу откладывание AssemblyVersion),

  4. Добавленный ссылка к теперь глобальному GlobalInfo.cs, который расположен недалеко от всего проекта
  5. Удостоверьтесь, что этот файл создается однажды, так, чтобы у меня был файл по умолчанию в управлении исходным кодом

Это теперь обновит GlobalInfo.cs, только если переменная среды, BUILD_NUMBER установлен, который это - когда я создаю через TeamCity.

Я выбрал хранение постоянного AssemblyVersion, так, чтобы ссылки все еще работали и только обновили AssemblyFileVersion, так, чтобы я видел, от какой сборки dll.

20
задан abatishchev 14 June 2010 в 14:16
поделиться

1 ответ

Файл 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.

18
ответ дан 30 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: