Build Fails with "Error:The process '/usr/bin/dotnet' failed with exit code 1" after adding "no-build:true" in the dotnet pack command

Build Fails with "Error:The process '/usr/bin/dotnet' failed with exit code 1" after adding "no-build:true" in the dotnet pack command

如果我从 DotNetCoreCLI@2 任务中删除 nobuild:true 选项,CI 管道运行良好打包项目(即创建 NuGet 包)但我无法理解 nobuild 选项带来的除了不构建项目之外的特殊之处。 我不需要再次构建项目,因为上一个任务已经构建了项目并锁定了生成的 DLL 的程序集版本。我想使用相同的构建来创建 NuGet 包并执行相同的操作我需要传递 NoBuild 选项但执行相同操作会破坏管道。

管道给出了要打包的 DLL 不存在于指定位置的错误,但我试图查看该位置,我发现 DLLs.One 让我感到困惑的是,虽然我有假定 nobuild 为真,但任务仍显示为构建项目。

- task: DotNetCoreCLI@2
  displayName: ".NET pack"
  inputs:
    command: pack
    packagesToPack: ${{ parameters.packagesToPack }}
    nobuild: true
    versioningScheme: byEnvVar
    versionEnvVar: CI_Version
    packDirectory: $(build.artifactStagingDirectory)${{ parameters.packTo }}
    verbosityPack: 'Normal'

同样重要的是要注意,同样的事情(nobuild:true) 在 Windows 代理上有效,但在 Ubuntu 代理上失败。

PS:可能是 windows 升级了代理并导致了问题。我搜索了这个问题,发现必须在构建管道中锁定 .net SDK

这个错误NU5026是指正在打包的项目还没有构建,所以无法打包。请查看此 reference.

The file ''F:\project\bin\Debug\net461\project.exe' to be packed was not found on disk.

根据您的描述,您取消了打包前的自动构建。您的构建任务和打包任务可能 运行 没有相同的配置。例如,在 dotnet build 任务中,项目自动使用 Debug 配置构建,而在 pack 任务中,您将配置设置为 Release.

在 dotnet build 任务中,项目是使用 Debug 配置自动构建的。

在 dotnet pack 任务中,打包的默认配置是 Release

如果不取消打包前的自动构建,在.net pack 任务中项目是在Release配置中构建的。

因此请检查您的构建任务和打包任务的日志,确保 dotnet 构建命令和 dotnet pack 命令使用相同的配置。

感谢您提供可能与该问题相关的其他答案,但事情已经处理完毕。

由于 .NET SDK 中的问题,该问题仅出现在 Linux 环境中。参考 here

正在生成的错误(在指定路径中找不到 DLL)在某种程度上是正确的,但也具有误导性。 DLL 在构建阶段在 Release 文件夹中生成,当我打包 DLL 时,它们在 release 文件夹中被搜索。 尽管 Releaserelease 在 Windows 环境中保持不变,但 Ubuntu 区分大小写会产生错误。

.Net Core 的 SDK 实现缺少 Regex 选项中的 IgnoreCase,这导致构建在切换到 Linux 代理时中断。

DotnetBuild:

Dotnet 包:

解决方案: 定义在 .csproj 中生成 DLL 的文件夹,自动构建和打包步骤将选择 DLL从那里开始。