在 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
(取决于您用于源代码管理的)排除了bin
、obj
和packages
文件夹?您能否确认这些文件夹不在源代码管理中?
根文件夹中有一个.gitignore
文件。我相信它是 Visual Studio 的默认设置,并做了一些小改动。是的,bin
、obj
和 **/packages/*
(nuget) 有规则
是否有人覆盖了 .gitignore
并意外将其提交到源代码管理?
@DanielMann 你的意思是 nuget 包?不,软件包不受源代码控制。
我知道 nuget 需要恢复依赖图中的每个项目。我相信在 Visual Studio 中构建解决方案不会构建或恢复不在解决方案中的项目,即使解决方案中的项目有对其的项目引用,但我不知道 msbuild 是否有相同的限制。我怀疑是的,因为 Visual Studio 在幕后大量使用 MSBuild。如果您遇到这种情况,这是一个已知问题/设计使然。但它没有回答为什么行为会发生变化。
【参考方案1】:
一些项目使用PackageReference
格式,但.sfproj
项目使用packages.config
文件。
我仍然不明白构建开始失败的原因,但我找到了解决方法。鉴于 Service Fabric 项目尚不支持 PackageReference
,我的解决方法是使用 both 恢复任务,如下所示:
【讨论】:
NuGet 恢复应该足够了,因为它适用于PackageReference
和 packages.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 测试