Как изменить версию DLL-файла / продукта в TeamCity с помощью AssemblyInfo Patcher, созданного на основе решения .net? - PullRequest
0 голосов
/ 04 июля 2018

В моем решении есть несколько проектов библиотеки классов c # (DotNet Core 2.1) и пользовательский интерфейс (проект WPF).

Допустим, свойства проекта библиотеки классов имеют версию сборки 2019.1.15341.0:

Project 1 has Assembly version 2019.1.15341.0

Кроме того, та же версия сборки назначена пользовательскому интерфейсу (приложение WPF):

[assembly: AssemblyVersion("2019.1.15341.0")]
[assembly: AssemblyFileVersion("2019.1.15341.0")]

В TeamCity я настроил AssemblyInfo Patcher:

TeamCity AssemblyInfo Patcher

Я строю законченное решение с использованием TeamCity, и сборки были успешными:

Build Successful in TeamCity

Теперь давайте посмотрим свойство артефактов, созданных после построения полного решения:

1. Проект 1 (библиотека классов, свойства DLL):

project1.dll

2. UserInterface (проект WPF):

USER interface exe

Я вижу, что UserInterface.exe's Version был изменен TeamCity в соответствии с build counter и build vcs number, но почему DLL's version не изменился? Я пропускаю какие-либо шаги? или что-нибудь еще?

Информацию, которую мне не хватает, пожалуйста, сообщите.

Свойства EXE-файлов выглядят нормально, как и ожидалось. Основная проблема связана с библиотеками DLL: это свойство не изменяется.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Как уже упоминалось, это .Net Core проект, поэтому он может не иметь AssemblyInfo.cs, где определены свойства Assembly.

Перейдите в раздел «Сборка компонентов» в TeamCity и добавьте функцию сборки.

  1. Выберите: Заменитель содержимого файла
  2. (необязательно) Нажмите «Загрузить шаблон» и найдите или введите версию в разделе .Net Core

Adding File content replacer as Build Feature

  1. Вы можете использовать собственное регулярное выражение, например: <Version>\S*<\/Version> или использовать регулярное выражение шаблона: (<(Version)\s*>).*(<\/\s*\2\s*>)

Replace with:

Я использовал Заменить на: <Version>%MAJOR%.%MINOR%.%build.counter%.%build.vcs.number%</Version>, чтобы теги <version> и </version> не удалялись согласно моему регулярному выражению. Все зависит от вашего регулярного выражения, что вам нужно заменить.

Точно так же я добавил другие обязательные параметры: other required parameters

Плюсы: После построения проекта я вижу ожидаемые результаты в свойствах.

Минусы: Выполняет поиск и замену файлов несколько раз, а не один раз (количество функций сборки, одинаковое количество раз, когда оно будет выполнено, и такое же количество раз, когда оно будет возвращено!)

0 голосов
/ 04 июля 2018

Согласно документации патчера TeamCity AssemblyInfo :

... после настройки этой функции сборки она будет запущена до первого шага сборки. TeamCity сначала выполнит замену файлов, найденных в каталоге проверки сборки, а затем запустит вашу сборку.

Однако значения, которые вы имеете на вкладке «Пакет» настроек проектов DLL (ваш первый снимок экрана), применяются во время самого процесса сборки, то есть когда MSBuild обрабатывает ваши проекты. Я подозреваю, что значения, установленные патчером TeamCity Assembly, заменены здесь на значения по умолчанию.

...