Как использовать пакет dotnet с AppVeyor?

Я автоматизирую свои проекты .NET Standard (новый формат csproj VS 2017) для создания пакетов nuget после сборки.

Дело в том, что я хочу, чтобы все проекты в решении соответствовали версии моей сборки AppVeyor, а не версии, установленной в свойствах пакета csprojs (по умолчанию это 1.0.0).

Еще одна вещь, которую следует учитывать, это то, что мои проекты имеют ссылки между ними и также должны хранить версию сборки AppVeyor.

Есть ли простой способ сделать это? Как?


person SuperJMN    schedule 24.06.2017    source источник


Ответы (2)


Вы можете передать версию как свойство MSBuild в dotnet pack:

dotnet pack MyProject.csproj --configuration Release /p:Version="1.2.3"

(это работает и для dotnet build)

Вот пример в скрипте сборки FakeItEasy.

Чтобы получить номер сборки AppVeyor, используйте APPVEYOR_BUILD_VERSION переменную среды.

Еще одна вещь, которую следует учитывать, это то, что мои проекты имеют ссылки между ними и также должны хранить версию сборки AppVeyor.

Это не должно быть проблемой, потому что вы не указываете версию в элементе <ProjectReference>.

person Thomas Levesque    schedule 26.06.2017

ОБНОВЛЕНИЕ: .NET Исправление основных файлов .csproj и автоматически упаковка nuget для проектов .NET Core теперь работает.


Есть несколько вариантов:

Выполните ручное исправление файла .NET Standard .csproj с помощью PowerShell. В этом примере мы обновляем версию, но таким же образом вы можете обновить и другие настройки.

$xmlPath = "$env:appveyor_build_folder\MyProject\MyProject.csproj"
$xml = [xml](get-content $xmlPath)
$propertyGroup = $xml.Project.PropertyGroup | Where { $_.Version}
$propertyGroup.Version = $env:appveyor_build_version
$xml.Save($xmlPath)
msbuild %appveyor_build_folder%\MyProject\MyProject.csproj /t:pack 

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

msbuild %appveyor_build_folder%\MyProject\MyProject.csproj /t:pack /p:Configuration=%CONFIGURATION%;NuspecFile=MyProject\MyProject.nuspec;PackageVersion=%APPVEYOR_BUILD_VERSION%

Конечно, вы можете использовать dotnet pack, но мы считаем, что в будущем msbuild останется основным инструментом, поэтому мы стараемся использовать его для всех сценариев.

Излишне говорить, что мы в AppVeyor должны сделать этот скрипт ненужным, мы отслеживаем это в https://github.com/appveyor/ci/issues/1404.

person Ilya Finkelsheyn    schedule 25.06.2017
comment
Я не думаю, что csproj должен иметь атрибут Version. Согласно этому следует быть PackageVersion. - person Justin Skiles; 30.06.2017
comment
Согласно этому, для PackageVersion по умолчанию используется значение $(Version), то есть свойства Version в проекте. Насколько я понимаю, Version по-прежнему действует, но PackageVersion более специфичен для упаковки Nuget. Дополнение: я думаю, что для автоматического исправления в AppVeyor мы должны предложить варианты исправления обоих и фактически исправить то, что действительно существует в .csproj - person Ilya Finkelsheyn; 01.07.2017
comment
Это прекрасно работает для файлов *.csproj, но разве это не работает для файлов *.fsproj? Я могу заставить исправление информации о сборке работать для обоих, но dotnet pack, похоже, работает только для файлов *.csproj. - person jam40jeff; 11.10.2018