--no-restore を使用した ReadyToRun プロジェクトの発行には、復元に対する変更が必要です
--no-restore
に加えて、-p:PublishReadyToRun=true
を使用してプロジェクトを発行する場合、プロジェクトは前の dotnet restore
操作で復元されたパッケージのみを使用してビルドされます。 .NET 5 では、このプロセスが動作し、Crossgen のバイナリが生成されました。 .NET 6 では、この同じプロセスが NETSDK1094 エラーで失敗します。
導入されたバージョン
.NET 6
以前の動作
以前のバージョンでは、Crossgen アプリケーションはランタイムを使用してパッケージ化されていました。 その結果、プロジェクトが復元されたかどうかに関係なく、アプリケーションで Crossgen プロセスを実行できました。 追加のネットワーク アクセスが行われないことを確実にするために、publish コマンドに --no-restore
を追加して、dotnet restore
と dotnet 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 を復元することもできます。
.NET