Передайте переменную в nuspec с пакетом dotnet
Когда я использую пакет dotnet, как передать переменную в мой файл nuspec?
Я пытаюсь передать версию. Вот nuspec:
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<!-- Required elements-->
<id>1</id>
<version>$PackageVersion$</version>
<description>1</description>
<authors>1</authors>
</metadata>
</package>
И вот моя команда:
пакет dotnet.exe /p:NuspecFile=./App.Nuspec /p:PackageVersion=9.7.28170
Я получаю ошибку: значение не может быть нулевым или пустой строкой.
Интересно, если я изменю переменную на описание:
<version>1.1.0</version>
<description>$PackageVersion$</description>
Я получаю ошибку: описание не требуется.
Когда тег является описанием, имя тега находится в сообщении об ошибке. Однако, когда тег является версией, в сообщении об ошибке нет имени тега - только значение термина. Оба поля обязательны для заполнения.
Я делаю это с помощью командной строки на моем локальном компьютере, но сборка TFS выдает ту же ошибку. Вот подсказка TFS для дополнительных свойств сборки для этого шага. Задает список пар токен = значение, разделенных точками с запятой, где каждое вхождение $token$ в файле.nuspec будет заменено на указанное значение. Значения могут быть строками в кавычках.
Похоже, я следую этим правилам. И вот что генерирует TFS:
Пакет "C:\Program Files\dotnet\dotnet.exe" D:\Agent_work\5\s\MyProject\MyProject.csproj - выход D:\Agent_work\5\a /p:NuspecFile=App.nuspec /p:PackageVersion=9.7.28170 --verbosity Normal
То же, что и моя команда.
Что я делаю неправильно?
1 ответ
Файлы csproj действуют как сквозные. Переменные должны быть настроены следующим образом:
<NuspecFile>App.nuspec</NuspecFile>
<NuspecProperties>version=$(PackageVersion)</NuspecProperties>
Команда:
пакет dotnet.exe /p:PackageVersion=9.7.28170
При этом используется файл Nuspec из файла proj и передается переменная PackageVersion в тег версии файла.nuspec.
Предположим, ваш файл спецификации nuget выглядит примерно так: check.nuspec
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>abc1234</id>
<version>1.0.0</version>
<title>FutureGroup/title>
<authors>FutureGroup</authors>
</metadata>
</package>
Теперь, используя dotnet pack cli, вы хотите создать пакет nupkg, используя файл nuspec с именем FutureGroup.2.0.0-Dev.
Добавьте строку ниже в файл csproj, чтобы параметр передавался из dotnet cli через csproj в файл nuspec.
<IsPackable>true</IsPackable>
<NuspecFile>check.nuspec</NuspecFile>
<NuspecProperties>version=$(PackageVersion)</NuspecProperties>
dotnet cli
dotnet pack .\sample.csproj -p:NuspecFile=.\nuget\check.nuspec -p:NuspecBasePath=.\temp /p:Outputpath=package /p:PackageVersion=2.0.0-Dev