.nu​​spec 文件中的 Azure DevOps 管道变量

use*_*547 8 yaml nuget-package nuspec azure-devops azure-pipelines

是否可以在用于包创建的 .nuspec 文件中使用 Azure DevOps 管道变量?

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>MyTemplate</id>
    <version>$(var1).$(var2).$(var3)</version>
    <description>
      Some template
    </description>
    <authors>Test Test</authors>
    <packageTypes>
      <packageType name="Template" />
    </packageTypes>
  </metadata>
</package>
Run Code Online (Sandbox Code Playgroud)

或者它是 .yaml 任务中那些在 .nuspec 文件(它是必需元素)中指定的版本的一种方法吗?

task: NuGetCommand@2
  displayName: Pack template
  inputs:
    command: pack
    packagesToPack: '**/Template/*.nuspec'
    packDestination: $(Build.ArtifactStagingDirectory)
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(var1)'
    minorVersion: '$(var2)'
    patchVersion: '$(var3)'
Run Code Online (Sandbox Code Playgroud)

但是使用 versioningScheme: byPrereleaseNumber 我们会将时间戳添加到我们的数字中。

bkw*_*ign 4

构建属性的弹出工具提示:

指定 token=value 对的列表,以分号分隔,其中 .nuspec 文件中出现的每个 $token$ 都将替换为给定值。值可以是引号中的字符串。

我通过进入 UI 构建器来直观地编辑管道,得出了以下 YAML,任务中有一个“高级”窗格NuGet > Pack。它允许您在“构建属性”(buildProperties)下指定其他令牌替换值

我有一种感觉,你必须将一种类型的令牌转换为另一种类型的令牌。请参阅最后一行的 buildProperties:

variables:
  Parameters.requestedMajorVersion: '1'
  Parameters.requestedMinorVersion: '0'
  Parameters.requestedPatchVersion: '6'

steps:
- task: NuGetCommand@2
  displayName: 'NuGet pack'
  inputs:
    command: pack
    packagesToPack: '**/*.nuspec'
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Parameters.requestedMajorVersion)'
    minorVersion: '$(Parameters.requestedMinorVersion)'
    patchVersion: '$(Parameters.requestedPatchVersion)'
    includeSymbols: true
    buildProperties: 'id=$(Build.Variable)'
Run Code Online (Sandbox Code Playgroud)

示例 .nuspec

variables:
  Parameters.requestedMajorVersion: '1'
  Parameters.requestedMinorVersion: '0'
  Parameters.requestedPatchVersion: '6'

steps:
- task: NuGetCommand@2
  displayName: 'NuGet pack'
  inputs:
    command: pack
    packagesToPack: '**/*.nuspec'
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Parameters.requestedMajorVersion)'
    minorVersion: '$(Parameters.requestedMinorVersion)'
    patchVersion: '$(Parameters.requestedPatchVersion)'
    includeSymbols: true
    buildProperties: 'id=$(Build.Variable)'
Run Code Online (Sandbox Code Playgroud)

  • 我成功地使用@bkwdesign描述的方法将版本变量从Yaml替换为.nuspec这应该被标记为正确答案。对我有用的示例: buildProperties: 'vmajor=$(Major);vminor=$(Minor);vpatch=$(Patch)' .nuspec: &lt;version&gt;$vmajor$.$vminor$.$vpatch$&lt;/version &gt; (2认同)