我在Azure DevOps上为Service Fabric解决方案配置了一个构建管道,如下所示:
直到几天前,一切都还不错,当特定的构建代理(私有)开始构建失败时,出现以下错误(对于一些项目):
C:\ Program Files \ dotnet \ sdk \ 2.1.200 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.PackageDependencyResolution.targets(327,5):错误:资产文件'F:\ Agent03 \ w \找不到84 \ s \ src \ MyProject.Sam.Tiles.Domain \ obj \ project.assets.json'。运行NuGet软件包还原以生成此文件。
失败的任务是Build solution $(PathToSolution)
。
奇怪的是,在某些代理上运行时构建失败,但在其他代理上运行则很好。
一些细节:
Use NuGet 4.x
任务是最近开始使用NuGet v4.9.1的。我没有运气就尝试使用v4.8.1; PackageReference
格式,但是.sfproj
项目使用packages.config
文件dotnet restore
任务,但是尝试恢复.sfproj
项目的软件包时出现错误:
`错误:无法找到 '.... \ packages \ Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7 \ build \ Microsoft.VisualStudio.Azure.Fabric.Application.props' 文件。请还原 'Microsoft.VisualStudio.Azure.Fabric.MSBuild'Nuget程序包
关于什么可能导致此问题的任何想法?
答案 0 :(得分:3)
某些项目使用PackageReference
格式,但是.sfproj
项目使用packages.config
文件。
我仍然不明白为什么构建开始失败,但是我能够找到解决方法。鉴于Service Fabric项目尚不支持PackageReference
,我的解决方法是同时使用两者还原任务:
答案 1 :(得分:1)
特雷弗(Trevor)对2/20的评论为我提供了线索。您可能没有该解决方案引用的完整项目集。 (ProjectReferences可能会转到解决方案中没有的其他项目。)
这是这种疯狂的解决方法(运行dotnet.exe和nuget.exe还原任务)起作用的原因:
dotnet restore将在默认情况下遍历项目引用,以确保也将其还原。 --no-dependencies开关可以将其关闭。
nuget.exe恢复的默认设置与之相反,因为我们不想破坏旧用户。 -recursive可以启用它。
正确的解决方案是使您的解决方案包含所有项目。
-Rob Relyea NuGet客户团队,工程经理
答案 2 :(得分:0)
我的问题原来是一个解决方案,其中未包含所有必需的项目。
我有一个主要的解决方案文件,其中包含我的所有项目,以及一些只包含某些项目的较小的解决方案文件。主解决方案在Azure DevOps中构建良好,但部分解决方案失败。
我意识到丢失的project.assets.json文件属于该失败解决方案中需要包含的项目。