1

.NET Core SDK が見つからないため、パッケージの復元は部分的にしか成功せず、SDK プロジェクトが省略されます。

警告: msbuild プロジェクト情報の読み取り中にエラーが発生しました。入力ソリューションまたはプロジェクト ファイルが有効であることを確認してください。NETCore および UAP プロジェクトはスキップされ、packages.config ファイルのみが復元されます。

これは単なる警告であり、nuget.exe はステータス コード 0 で終了するため、ビルド パイプラインは続行され、後で失敗するため、原因を見つけるのが難しくなります。

これは私たちの環境では一般的な問題であるため、この警告をエラーとして処理したいと考えています。他の警告もエラーとして扱われるのであれば、まったく問題ありません (望ましいことですらあります)。

NuGet が MSBuild プロパティTreatWarningsAsErrorsと をWarningsAsErrors読み取ることは知っていますが、コマンド ラインからそれらを使用することはできませんでした。NUGET_RESTORE_MSBUILD_ARGS 環境変数を に設定しようとしまし/p:TreatWarningsAsErrors=trueたが、オプションが内部 MSBuild 呼び出しに渡されても、nuget.exe によって出力される警告には影響しませんでした。他の適切なCLI オプション環境変数は見つかりませんでした。

環境

オンプレミスの Azure Pipelines ビルドで、NuGet タスクを実行して、ソリューションのパッケージを復元します。このソリューションには、.NET Framework を対象とし、packages.config を使用するプロジェクトと、PackageReference を使用して .NET Core を対象とするプロジェクトの両方が含まれています。

ビルド エージェントは私の管理下にありません。正しい SDK バージョンがインストールされているものもあれば、インストールされていないものもあります。.NET Core SDK インストーラー タスクを使用して、適切な SDK をインストールします。

ソリューションのビルド定義または SDK の更新の変更により、ビルドが壊れる可能性があります。その場合、エラー メッセージはあいまいです。なぜなら、これは VS ビルドからのものであり、根本原因があるが緑色に光っているパッケージ復元ビルド ステップからのものではないからです。

内部的には、NuGet タスク (バージョン 2.*) が nuget.exe (現在のバージョン 5.0.2) を実行し、次に MSBuild を実行して、PackageReference に関連するジョブの一部を実行します。MSBuild が失敗し、NuGet.CommandLine.ExitCodeException がスローされますが、キャッチされ、ログに記録され、破棄されます。上記の Warning_ReadingProjectsFailed 警告のすぐ上に、スタック トレースが出力されます。

NuGet.CommandLine.ExitCodeException: Exception of type 'NuGet.CommandLine.ExitCodeException' was thrown.
    at NuGet.CommandLine.MsBuildUtility.<GetProjectReferencesAsync>d__6.MoveNext()
 --- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at NuGet.CommandLine.RestoreCommand.<GetDependencyGraphSpecAsync>d__52.MoveNext()
 --- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at NuGet.CommandLine.RestoreCommand.<DetermineInputsFromMSBuildAsync>d__47.MoveNext()

catch 句の上部にあるコメントには、次のように書かれています。

                // At this point reading the project has failed, to keep backwards
                // compatibility this should warn instead of error if
                // packages.config files exist, but no project.json files.
                // This will skip NETCore projects which is a problem, but there is
                // not a good way to know if they exist, or if this is an old type of
                // project that the targets file cannot handle.
4

1 に答える 1