--no-restore を使用した ReadyToRun プロジェクトの発行には、復元に対する変更が必要です

--no-restore に加えて、-p:PublishReadyToRun=true を使用してプロジェクトを発行する場合、プロジェクトは前の dotnet restore 操作で復元されたパッケージのみを使用してビルドされます。 .NET 5 では、このプロセスが動作し、Crossgen のバイナリが生成されました。 .NET 6 では、この同じプロセスが NETSDK1094 エラーで失敗します。

導入されたバージョン

.NET 6

以前の動作

以前のバージョンでは、Crossgen アプリケーションはランタイムを使用してパッケージ化されていました。 その結果、プロジェクトが復元されたかどうかに関係なく、アプリケーションで Crossgen プロセスを実行できました。 追加のネットワーク アクセスが行われないことを確実にするために、publish コマンドに --no-restore を追加して、dotnet restoredotnet publish を分離するのが一般的な方法でした。

新しい動作

.NET 6 では、dotnet restore の後に dotnet publish -p:PublishReadyToRun=true --no-restore NETSDK1094 エラーで失敗します。 これは、Crossgen バイナリが個別の NuGet パッケージとして出荷されているため、発行を成功させるには復元操作の一部である必要があるためです。

変更理由

多くのワークロードにおいて Crossgen バイナリは必要ないため、メイン SDK から分割されました。 通常は要求時に取得され、発行する MSBuild ターゲットによって、復元するパッケージの一覧にパッケージを追加することで、この取得が処理されるようになりました。

  • 分離された発行エクスペリエンスを維持する場合は、復元ステップに ReadyToRun を発行することを伝えます。 復元コマンドラインにも -p:PublishReadyToRun=true を追加します。
  • または、publish コマンドラインから --no-restore を削除し、publish コマンドを使用して Crossgen を復元することもできます。