【问题标题】:Build Fails with "Error:The process '/usr/bin/dotnet' failed with exit code 1" after adding "no-build:true" in the dotnet pack command在 dotnet pack 命令中添加“no-build:true”后,构建失败并显示“错误:进程 '/usr/bin/dotnet' failed with exit code 1”
【发布时间】:2020-05-01 20:56:10
【问题描述】:

如果我从 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'

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

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

【问题讨论】:

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


    【解决方案1】:

    感谢其他可能与该问题相关的答案,但事情已经处理好了。

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

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

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

    DotnetBuild:

    Dotnet 包:

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

    【讨论】:

    • 感谢您在这里分享您的解决方案,您可以接受您的解决方案作为答案吗?因此,对于遇到相同问题的其他成员轻松找到解决方案将很有帮助。祝你有美好的一天:)
    • @Shubhanshu Rastogi,您的解决方案似乎没有被接受为答案:)。感谢您的分享。
    • 补充一点,在将目标框架更改为标准 2.1 后,我遇到了同样的错误,但这与包本身无关,这是我的测试没有运行,因为我有csproj 的路径错误,因此该包没有要打包的 dll。起初我从未看过测试,因为我有一个绿色的勾号,所以我认为它们很好。
    【解决方案2】:

    对于这个错误NU5026,它是指被打包的项目尚未构建,因此无法打包。请查看此reference

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

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

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

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

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

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

    【讨论】:

    • 感谢您提供的信息,但我已经在发布模式下构建了代码,并且还在发布模式下打包了它。问题仅在 Ubuntu 机器上,一切都在 Windows 机器上运行。虽然我已经解决了这个问题,但它是 .NET SDK 中的一个错误
    猜你喜欢
    • 2021-07-29
    • 2020-06-28
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2014-11-18
    • 2022-12-01
    相关资源
    最近更新 更多