Добавить номер сборки в версию пакета с помощью `dotnet pack` в процессе сборки VSTS - PullRequest
0 голосов
/ 01 мая 2018

С библиотекой .NET Framework вы можете указать версию с помощью подстановочного знака, а команда пакета NUGET автоматически добавит дату и версию сборки при запуске задачи сборки NUGET в VSTS.

[assembly: AssemblyVersion("1.0.*")]

NUGET PACK сгенерирует файл NUPKG с версией, подобной 1.0.6604.1234, с добавлением номера даты и идентификатора сборки.

NET Стандартные выпуски

В стандартах .NET Core и .NET новый формат .csproj не поддерживает этот формат с подстановочными знаками.

Мы не можем упаковать с Nuget.exe (причина: эта проблема ), но мы можем использовать dotnet pack, за исключением того, что мне нужно автоматически увеличивать номера сборки. dotnet Задача сборки в VSTS позволяет полностью заменить номер версии, но я хочу сохранить версию в файле csproj и просто добавить номер сборки (как я привык).

Я обнаружил, что использование <VersionPrefix>x.y</VersionPrefix> в файле csproj будет работать с nuget pack, и тогда я мог бы добавить дополнительный параметр VersionSuffix=$(Build.BuildNumber) в задачу упаковки.

Все выглядело хорошо, пока первый разработчик не обновил версию проекта в диалоге свойств проекта. Visual Studio проигнорировала VersionPrefix и установила тег <Version> - а исправление номера сборки игнорируется, поскольку существует тег Version.

Есть ли способ прочитать Version из csproj? Если это так, я мог бы установить свойство сборки на Version=$(ProjectVersion).$(Build.BuildNumber)?

Или есть альтернативные способы автоматического увеличения версии сборки при упаковке?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Спасибо @ patricklu-msft за его предложения.

Похоже, что нет встроенного способа эмуляции подстановочного поведения, которое у нас ранее было NUGET pack с dotnet pack, и не было способа извлечь тег <Version> из файла проекта.

Итак, я создал новую задачу VSTS Build, которая делает это: VersionTaskReader в MarketPlace.

Это расширение может указывать на .csproj или .vbproj и будет устанавливать переменные окружения VERSION и VERSION_BUILD, к которым добавляется BUILDID. При желании вы можете добавить префикс, чтобы сделать каждый экземпляр другим, если это необходимо.

Например, если ваш проект содержит <Version>1.1</Version>, тогда VERSION_BUILD будет выглядеть примерно так: 1.1.8680

Тогда задача dotnet pack может использовать переменную среды VERSION_BUILD на экране параметров управления версиями, так что номер сборки автоматически увеличивается.

0 голосов
/ 02 мая 2018

Сначала вы можете выбрать Use an environment variable для Автоматическое управление версиями пакета , используйте определенную переменную, такую ​​как temp ($(build.buildNumber)), в качестве Переменная среды .

enter image description here enter image description here

Подробнее смотрите по этой ссылке: Автоматическое уточнение номера версии пакета сборки пакета Dotnet

Другой способ - использовать поле «arguments» в задаче CLI dotnet, вы можете передать дополнительные аргументы в dotnet cli.

Использование --version-suffix $(Build.BuildNumber) пропустит сборку номер как суффикс версии. Убедитесь, что у вас нет <version> набор элементов в вашем csproj, а скорее элемент <versionprefix>. Встроенная версия будет выглядеть как versionprefix-versionsuffix, поэтому для Например, если у вас есть <versionprefix>1.2.3</versionprefix> и сборка номер 201805002, встроенная версия будет 1.2.3-201805002. В этом случае не выбирайте автоматическое управление версиями пакета.

...