我在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包有什么可能导致这个问题的想法?
特雷弗对2/20的评论给了我线索。您可能没有解决方案引用的完整项目集。 (ProjectReferences可能会转到其他项目,这些项目不在解决方案中)。
这就是为什么这个疯狂的解决方法(运行dotnet.exe和nuget.exe恢复任务)工作的原因:
dotnet restore将默认执行项目引用,以确保它们也可以恢复。 --no-dependencies开关可以关闭它。
nuget.exe还原具有相反的默认值,因为我们不想破坏旧用户。 -recursive可以打开它。
正确的解决方案是让您的解决方案包含所有项目。
-Rob Relyea NuGet客户团队,工程经理
我的问题原来是一个不包括所有必要项目的解决方案。
我有一个主解决方案文件,其中包括我的所有项目,以及一些只包含部分项目的小型解决方案文件。主解决方案在Azure DevOps中构建得很好,但部分解决方案失败了。
我意识到缺少的project.assets.json文件属于需要包含在此失败解决方案中的项目。