在dotnet pack命令中添加“ no-build:true”后,构建失败并显示“错误:进程'/ usr / bin / dotnet'失败,退出代码为1”

时间:2020-01-15 05:20:47

标签: asp.net-core azure-devops continuous-integration azure-pipelines build-pipeline

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

管道给出的错误是要打包的DLL在指定位置不存在,但我试图查看该位置并找到DLL。使我困惑的一件事是尽管我给出了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'

Error:

还必须注意,相同的东西(nobuild:true)在Windows Agent上有效,但在Ubuntu Agent上失败。

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

2 个答案:

答案 0 :(得分:1)

对于此错误NU5026,它表示正在打包的项目尚未生成,因此无法打包。请查看此reference

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

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

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

enter image description here

在dotnet pack任务中,“程序包”的默认配置为Release

enter image description here

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

enter image description here

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

答案 1 :(得分:1)

感谢其他可能与该问题有关的答案,但事情已经解决了。

由于.NET SDK中的问题,该问题仅在Linux环境上。请参阅here

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

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

DotnetBuild: enter image description here

Dotnet Pack: enter image description here

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