2

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

管道给出了要打包的 DLL 在指定位置不存在的错误,但我尝试查看该位置,我可以找到 DLL。让我感到困惑的一件事是,虽然我已将 nobuild 设为 true 但仍然任务显示为构建项目。

- 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

4

2 回答 2

3

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

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

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

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

点网构建: 在此处输入图像描述

点网包: 在此处输入图像描述

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

于 2020-01-16T08:59:14.267 回答
1

此错误NU5026是指被打包的项目尚未构建,因此无法打包。请查看此参考

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 task 中,项目是通过配置自动构建的Debug

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

于 2020-01-15T10:08:02.447 回答