次のような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)
の1つです。
奇妙なことは、一部のエージェントで実行するとビルドが失敗するが、他のエージェントではビルドがうまくいくことです。
いくつかの詳細:
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に関するTrevorのコメントは、私にヒントを与えてくれました。ソリューションによって参照されるプロジェクトの完全なセットがない可能性があります。 (ProjectReferencesは、ソリューションに含まれていない他のプロジェクトに移動する場合があります)。
このクレイジーな回避策(dotnet.exeとnuget.exeの復元タスクを実行)が機能した理由は次のとおりです。
dotnet restoreは、デフォルトでプロジェクト参照をウォークして、それらも復元されるようにします。 --no-dependenciesスイッチはそれをオフにすることができます。
古いユーザーを壊したくなかったため、nuget.exeの復元には反対のデフォルトがあります。 -recursiveはこれをオンにすることができます。
適切なソリューションは、ソリューションにすべてのプロジェクトを含めることです。
-Rob Relyea NuGetクライアントチーム、エンジニアリングマネージャー
私の問題は、必要なすべてのプロジェクトを含まない解決策であることが判明しました。
all自分のプロジェクトを含むマスターソリューションファイルと、一部のプロジェクトのみを含む多数の小さなソリューションファイルがあります。マスターソリューションはAzure DevOpsで正常に構築されましたが、部分的なソリューションは失敗しました。
見つからないproject.assets.jsonファイルは、この失敗したソリューションに含める必要があるプロジェクトに属していることに気付きました。