Azure DevOps管道变量在.nuspec文件中

10

在创建包时,是否可以在 .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>

或者说这是一种覆盖.nuspec文件中指定版本(它是必需元素)的方法,使用.yaml任务中的版本?

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

但是如果我们使用 versioningScheme: byPrereleaseNumber ,我们将在数字后面添加时间戳。


2
您可以使用其中一个令牌替换任务来覆盖这些设置:https://marketplace.visualstudio.com/search?term=replac&target=AzureDevOps&category=Azure%20Pipelines&sortBy=Relevance - Rob Bos
我曾经遇到过类似的问题 - 请查看这里获取我的解决方案:https://dev59.com/21QJ5IYBdhLWcg3wCxQZ - SharpC
1个回答

4

生成属性的弹出式工具提示:

指定由分号分隔的令牌=值对列表,其中.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)'

示例.nuspec
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata minClientVersion="2.5">
    <id>$id$</id>

我无法解决的一个问题是,如果您尝试将URL作为值添加到任何包含等号“=”的令牌中,则Nuget Pack的解析器会遇到解析正确值的问题。是否有任何已知的转义序列可解决此类问题? - phifi
2
我成功地使用@bkwdesign描述的方法,将Yaml中的版本变量替换为.nuspec中的变量。这应该被标记为正确答案。 适用于我的示例:buildProperties: 'vmajor=$(Major);vminor=$(Minor);vpatch=$(Patch)'.nuspec:<version>$vmajor$.$vminor$.$vpatch$</version> - Gerrie Pretorius
这种方法对我来说很有效,可以将.nuspec文件中的$version$替换为我在yaml管道中拥有的版本变量。Nuspec文件 - <version>$version$</version>然后,在yaml管道中使用Nuget任务中的buildProperties - buildProperties: 'version=$(nugetVersion)' 其中nugetVersion是您的管道变量。 - Jitendra Panchal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接