Nuget 在Azure Devops上运行生成时未找到资产文件project.Assets.json

Nuget 在Azure Devops上运行生成时未找到资产文件project.Assets.json,nuget,azure-devops,azure-service-fabric,azure-pipelines,Nuget,Azure Devops,Azure Service Fabric,Azure Pipelines,我为Azure DevOps上的Service Fabric解决方案配置了构建管道,如下所示: 一切都很好,直到几天前,当构建开始在特定构建代理(private)上失败时,出现以下错误(对于一些项目): C:\Program Files\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.sdk\build\Microsoft.PackageDependencyResolution.targets(327,5):错误:找不到资产文件'F:\Agent03\w\84\s\

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

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

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包还原以生成此文件

失败的任务是
生成解决方案$(PathToSolution)
一个

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

一些细节:

  • 使用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软件包


知道是什么导致了这个问题吗?

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

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


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

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


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

Trevor在2月20日的评论为我提供了线索。您可能没有解决方案引用的完整项目集。(ProjectReference可能会转到解决方案中不包含的其他项目)

这就是为什么这种疯狂的解决方法(运行dotnet.exe和nuget.exe还原任务)奏效的原因:

默认情况下,dotnetrestore将遍历项目引用,以确保它们也被还原。
--任何依赖项
开关都无法关闭该功能

nuget.exe restore具有相反的默认值,因为我们不想破坏旧用户。
-recursive
可以启用此功能

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

-罗布·雷耶
NuGet客户团队、工程经理

您是否有适当的
.tfignore
/
.gitignore
(取决于您用于源代码管理的源代码)来排除
bin
obj
文件夹?能否确认这些文件夹不在源代码管理中?根文件夹中有一个
.gitignore
文件。我相信它是VisualStudio的默认版本,有一些minro更改。是的,
bin
obj
**/packages/*
(nuget)有规则有人覆盖了
.gitignore
并意外地将它们提交到源代码管理吗?@DanielMann你是说nuget包吗?不,包不受源代码管理。我知道nuget需要恢复依赖关系图中的每个项目。我相信在VisualStudio中构建解决方案不会构建或恢复不在解决方案中的项目,即使解决方案中的项目具有对它的项目引用,但我不知道msbuild是否具有相同的限制。我怀疑是的,因为VisualStudio在幕后大量使用MSBuild。如果你遇到这种情况,这是一个已知的问题。但是,它没有回答为什么行为会发生变化。NuGet restore应该足够了,因为它同时适用于
PackageReference
packages.config
。如果没有,可能会有问题。如果您能将问题提交给