运行 在 Azure Devops 上构建时找不到资产文件 project.assets.json

Assets file project.assets.json not found when running a build on Azure Devops

我在 Azure DevOps 上为 Service Fabric 解决方案配置了一个构建管道,如下所示:

一切都很好,直到几天前构建开始在特定构建代理(私有)上失败,并出现以下错误(对于一些项目):

C:\Program Files\dotnet\sdk.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(327,5): Error : Assets file 'F:\Agent03\w\s\src\MyProject.Sam.Tiles.Domain\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.

失败的任务是 Build solution $(PathToSolution) 一个。

奇怪的是,在某些代理上 运行 构建失败,但在其他代理上构建正常

一些细节:

知道可能导致此问题的原因吗?

一些项目使用 PackageReference 格式,但 .sfproj 项目使用 packages.config 文件。

我仍然不明白为什么构建开始失败,但我找到了解决方法。鉴于 Service Fabric 项目尚不支持 PackageReference,我的解决方法是使用 both 恢复任务,如下所示:

我的问题原来是一个没有包含所有必要项目的解决方案。

我有一个包含 所有 我的项目的主解决方案文件,以及一些仅包含部分项目的较小的解决方案文件。主解决方案在 Azure DevOps 中构建良好,但部分解决方案失败。

我意识到丢失的 project.assets.json 文件属于需要包含在此失败解决方案中的项目。

Trevor 对 2/20 的评论给了我线索。您可能没有解决方案引用的完整项目集。 (ProjectReferences 可能会转到其他项目,这些项目不在解决方案中)。

这就是为什么这个疯狂的解决方法(运行 dotnet.exe 和 nuget.exe 恢复任务)起作用的原因:

默认情况下,dotnet restore 将遍历项目引用以确保它们也被还原。 --no-dependencies 开关可以关闭它。

nuget.exe restore 有相反的默认值,因为我们不想破坏老用户。 -recursive 可以打开它。

正确的解决方案是使您的解决方案包含所有项目。

-Rob Relyea NuGet 客户端团队,工程经理