Передайте переменную в 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
Другие вопросы по тегам