首页 > 解决方案 > VSTS Build/AzureDevOps - nupkg 文件名不包含未指定文件中的版本

问题描述

我正在使用 Nuget Packager 任务步骤从我的 csproj 中获取 nupkg 文件,并且我的 .nuspec 文件包含版本号:

<version>1.1.2<version>

但是,生成的文件仅包含我的构建名称,并附有随机数。例如:MyProject.0.0.7416.19926.nupkg

自动包版本控制选项已关闭,因为我假设将使用 .nuspec 文件中的版本。我还包含了 Nuget 打包程序的 YAML 定义。

{
      "enabled": true,
      "continueOnError": false,
      "alwaysRun": false,
      "displayName": "NuGet Packager ",
      "timeoutInMinutes": 0,
      "condition": "succeeded()",
      "task": {
        "id": "333b11bd-d341-40d9-afcf-b32d5ce6f24b",
        "versionSpec": "0.*",
        "definitionType": "task"
      },
      "inputs": {
        "searchPattern": "$/...csproj",
        "outputdir": "$(Build.StagingDirectory)\\packages",
        "includeReferencedProjects": "false",
        "versionByBuild": "false",
        "versionEnvVar": "Version",
        "requestedMajorVersion": "1",
        "requestedMinorVersion": "0",
        "requestedPatchVersion": "0",
        "configurationToPack": "$(BuildConfiguration)",
        "buildProperties": "",
        "nuGetAdditionalArgs": "",
        "nuGetPath": "$(System.DefaultWorkingDirectory)\\build\\nuget.exe"
      }
    }

我正在为 nugget.exe 使用新版本,这就是为什么 nuGetPath 中的路径。

标签: azure-devopsnugetazure-pipelines-build-task

解决方案


由于Nuget Packager task已弃用,我建议您使用DotNetCoreCLI@2. 您需要在 csproj 中标记 nuspec 文件

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <NuspecFile>package.nuspec</NuspecFile>
  </PropertyGroup>

</Project>

这是我的 nuspec 文件:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <!-- Required elements-->
        <id>UniqeName</id>
        <version>1.1.2</version>
        <description>UniqueName</description>
        <authors>Krzysztof Madej</authors>

        <!-- Optional elements -->
        <!-- ... -->
    </metadata>
    <files>
        <file src="bin\Release\netstandard2.0\*" target="lib" />
    </files>
</package>

并使用此 YAML 构建定义:

variables:
  buildConfiguration: 'Release'

steps:

- task: DotNetCoreCLI@2
  displayName: "dotnet pack"
  inputs:
    command: 'pack'
    arguments: '--configuration $(buildConfiguration)'
    packagesToPack: '$(System.DefaultWorkingDirectory)/stackoverflow/08-nuget-packager/SampleApp.csproj'
    versioningScheme: 'off'
    outputDir: '$(Build.ArtifactStagingDirectory)'

- bash: ls $(Build.ArtifactStagingDirectory)

您将使用文件中Build.ArtifactStagingDirectory定义的版本控制进入您的 nuget 包nuspec

由于在标题中您提供了在 VSTS Build 和 Azure DevOps 之间进行选择的选择,因此我提出了 Azure DevOps 的解决方案。我不确定这是否与 VSTS 有任何关系。

Azure DevOps 日志


推荐阅读