如果我从 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 Agent上有效,但在Ubuntu Agent上失败。
PS:可能是Windows升级了代理并导致问题的情况。我搜索了这个问题,发现必须将.net SDK锁定在构建管道中
答案 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
配置自动构建项目。
在dotnet pack任务中,“程序包”的默认配置为Release
如果不取消打包前自动构建,则在.net pack任务中,将以Release
配置构建项目。
因此,请检查您的构建任务和打包任务的日志,确保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代理时构建中断。
解决方案: :在.csproj中定义在其中生成DLL的文件夹,然后自动构建和打包步骤将从中选择DLL。