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

Posted

技术标签:

【中文标题】在 Azure Devops 上运行构建时找不到资产文件 project.assets.json【英文标题】:Assets file project.assets.json not found when running a build on Azure Devops 【发布时间】:2019-05-01 19:30:07 【问题描述】:

我在 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 包

对可能导致此问题的原因有任何想法吗?

【问题讨论】:

您是否有一个合适的.tfignore/.gitignore(取决于您用于源代码管理的)排除了binobjpackages 文件夹?您能否确认这些文件夹不在源代码管理中? 根文件夹中有一个.gitignore 文件。我相信它是 Visual Studio 的默认设置,并做了一些小改动。是的,binobj**/packages/* (nuget) 有规则 是否有人覆盖了 .gitignore 并意外将其提交到源代码管理? @DanielMann 你的意思是 nuget 包?不,软件包不受源代码控制。 我知道 nuget 需要恢复依赖图中的每个项目。我相信在 Visual Studio 中构建解决方案不会构建或恢复不在解决方案中的项目,即使解决方案中的项目有对其的项目引用,但我不知道 msbuild 是否有相同的限制。我怀疑是的,因为 Visual Studio 在幕后大量使用 MSBuild。如果您遇到这种情况,这是一个已知问题/设计使然。但它没有回答为什么行为会发生变化。 【参考方案1】:

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

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

【讨论】:

NuGet 恢复应该足够了,因为它适用于 PackageReferencepackages.config。如果没有,可能会有问题。如果您可以在github.com/NuGet/Home/issues 上提出问题,将不胜感激【参考方案2】:

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

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

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

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

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于在 Azure Devops 上运行构建时找不到资产文件 project.assets.json的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps 构建管道自托管代理“设备上没有剩余空间”

在 Docker 中运行的自定义 Azure DevOps 构建代理上具有卷装载的测试容器

在 Azure DevOps 中使用构建管道运行 Google 测试

在 VS 2017 中设置新项目时找不到 Azure Functions

在 Azure 上托管时找不到位于我的根项目文件夹中的文件

使用 jenkins 构建时找不到 Kotlin 类