【问题标题】:Azure pipeline using DotNetCoreCLI pack command on .NET Core 3.1 gives error在 .NET Core 3.1 上使用 DotNetCoreCLI pack 命令的 Azure 管道出现错误
【发布时间】:2020-05-23 01:16:28
【问题描述】:

我正在尝试使用 .NET Core 3.1 构建类库并将其打包到 NuGet 中。这一切都在我的开发机器上构建良好,但在 DotNetCoreCLI pack 命令期间 Azure 管道构建失败。在使用 UseDotNet 在构建机器上安装 .NET Core 3.1 后,我能够继续构建。构建和测试运行良好,所以我相信 3.1 版本安装正确。

当我添加 pack 命令时,该步骤总是失败。这是我正在使用的命令:

- task: DotNetCoreCLI@2
  displayName: Package NuGet
  inputs: 
    command: 'pack'
    projects: '**/*.csproj'
    arguments: '--configuration $(BuildConfiguration)'
    outputDir: '$(Build.ArtifactStagingDirectory)/packages'

在此步骤中我收到以下错误:

/opt/hostedtoolcache/dotnet/sdk/3.1.101/Sdks/NuGet.Build.Tasks.Pack/build/NuGet.Build.Tasks.Pack.targets(198,5): 错误 NU5026:文件 '/home/vsts/work/1/s/ClassLib31/bin/调试/netcoreapp3.1/ClassLib31.dll' 在磁盘上找不到要打包的内容。 [/home/vsts/work/1/s/ClassLib31/ClassLib31.csproj]

请注意,上面的路径正在查找 bin Debug 文件夹,但这是一个发布版本。所有任务都使用相同的 BuildConfiguration 变量,但在此任务中,它似乎是在 Debug 文件夹中查找 dll。任何想法为什么?

补充说明: - 此构建脚本适用于 .NET Core 3.0 项目。我尝试将库切换到目标 3.0 并删除了 3.1 安装步骤。包按预期工作。 - 当我构建库的 Debug 版本时,此构建脚本有效(正如您所料,因为任务正在该 bin 文件夹中查找)。

【问题讨论】:

  • 很奇怪。根据您的描述,问题似乎来自.net core3.1,但我在托管代理ubuntu-16.04ubuntu-18.04 上使用.net core 3.1 对其进行了测试,它工作正常。不确定参数debug 来自哪里,如何指定直接参数,例如:arguments:--configuration Release
  • 我尝试在参数中指定 --configuration Release,但这没有帮助。它仍然给出了与调试路径相同的错误。我也在使用 ubuntu-18.04 托管代理。而且我使用的是 DotNetCoreCLI pack 命令,而不是 NuGetCommand 命令。
  • 同时找到了解决方法。用 NuGetCommand 包替换 DotNetCoreCLI 包命令可解决此问题。使用该命令,我可以将 .NET Core 3.1 库打包到一个 nuget 中……奇怪的是它适用于该构建任务,但不适用于 DotNetCoreCLI 任务。
  • 是的,我也用 DotNetCoreCLI pack 命令测试过,我也没有听到其他关于这个问题的声音。所以,这个问题应该更多地与环境相关,比如项目文件。无论如何,我很高兴您已经通过解决方法解决了您的问题,请在解决问题之前将您的评论转换为答案。这对阅读此线程的其他社区成员可能是有益的。谢谢。
  • 这是一种解决方法,但不是最终答案。 DotNetCoreCLI pack 命令应该适用于 .NET Core 3.1 项目......不应该使用 NuGetCommand。

标签: .net-core azure-pipelines


【解决方案1】:

DotNetCoreCLI@2 Pack 命令不支持arguments 参数。

所选命令的参数。例如,构建配置, 输出文件夹,运行时。参数取决于选择的命令 注意:此输入当前仅接受 buildpublishrun, test, custom. 如果您想为命令添加参数 未列出,请使用custom

您可以为build 命令使用arguments 参数,为pack 命令使用configuration 参数:

  - task: DotNetCoreCLI@2
    displayName: Build
    inputs:
      command: 'build'
      arguments: '--configuration Release'
      ...

  - task: DotNetCoreCLI@2
    displayName: Pack
    inputs:
      command: 'pack'
      configuration: 'Release'
      ...

还有另一种解决方法,但请注意,在这种情况下 packagesToPack 参数不起作用:

# command: 'pack'
command: custom
custom: pack
arguments: '--configuration Release'

【讨论】:

    【解决方案2】:

    在调试构建管道多一点时间后,我发现我在几个地方的 BuildConfiguration 变量大小写不匹配,这导致在 pack 命令中失败。我在梳理每个步骤的日志时发现了这一点。

    如果大小写不匹配出现在早期的命令(如构建和测试)中,它们似乎默认为发布构建。但是对于 pack 命令,它似乎默认在调试 bin 文件夹中查找。一旦我发现了这一点并清理了脚本,现在 .NET Core 3.1 构建就可以正常工作了。

    【讨论】:

    • 不清楚你是如何更改脚本的,所以我假设你没有改变arguments 参数。如果是这样,我很惊讶你能够让它运行。 The documentation 声明“此输入当前仅接受 buildpublishruntestcustom 的参数。如果您想为未列出的命令添加参数,请使用 custom 。”
    • @Moss 我有类似的问题并在这个帖子中发布了解决方案,让我知道它是否适合你。
    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多