【问题标题】:Pass variable to nuspec with dotnet pack使用 dotnet pack 将变量传递给 nuspec
【发布时间】:2018-11-26 16:32:01
【问题描述】:

使用 dotnet pack 时,如何将变量传递给我的 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

我得到错误: 值不能为 null 或空字符串。

有趣的是,如果我将变量更改为描述:

<version>1.1.0</version>
<description>$PackageVersion$</description>

我收到错误:需要说明。

当标签是描述时,标签名称在错误消息中。但是,当标签是版本时,错误消息中没有标签名称 - 只有术语值。两者都是必填字段。

我在本地计算机上使用命令行执行此操作,但 TFS 构建给出了相同的错误。这是该步骤的附加构建属性的 TFS 工具提示。 指定一个 token = value 对的列表,用分号分隔,其中 .nuspec 文件中每次出现的 $token$ 都将替换为给定的值。值可以是引号中的字符串。

听起来我正在遵守这些规则。以下是 TFS 生成的内容:

“C:\Program Files\dotnet\dotnet.exe”包 D:\Agent_work\5\s\MyProject\MyProject.csproj --output D:\Agent_work\5\a /p:NuspecFile=App.nuspec /p:PackageVersion=9.7.28170 --verbosity 正常

和我的命令一样。

我做错了什么?

【问题讨论】:

    标签: tfsbuild nuspec dotnet-core-pack


    【解决方案1】:

    csproj 文件用作传递。变量需要设置如下:

    <NuspecFile>App.nuspec</NuspecFile>
    <NuspecProperties>version=$(PackageVersion)</NuspecProperties>
    

    命令是:

    dotnet.exe 包 /p:PackageVersion=9.7.28170

    这会使用 proj 文件中的 Nuspec 文件,并将 PackageVersion 变量传递给 .nuspec 文件的版本标记。

    【讨论】:

    • 怎么样!你怎么知道在哪里,怎么……什么?
    • 尝试直接从命令行使用 dotnet pack 使用下一种方法时,我无法传递多个值:-p:NuspecProperties="key1=value1;key2=value2" ..found此处:docs.microsoft.com/en-us/nuget/reference/… 但仅列出多个 并使用您在此处解释的方法,效果很好。谢谢!
    【解决方案2】:

    假设您的 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,您想使用名称为 FutureGroup.2.0.0-Dev

    的 nuspec 文件生成 nupkg 包

    在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多