.NET SDK で小さい RID グラフを使う

.NET 8 以降のバージョンをターゲットとするプロジェクトでは、より小さい "移植可能な" ランタイム識別子 (RID) グラフが使用されるようになりました。

以前の動作

.NET SDK では、複雑な RID グラフを使用して、プロジェクトのビルドまたは発行時にアセットを決定しました。

新しい動作

.NET 8 以降、.NET SDK では、.NET 8 以降のバージョンをターゲットとするプロジェクトに対して、移植可能な RID のみで構成される小さなグラフを使用します。 これは、SDK がデフォルトでバージョン固有またはディストリビューション固有の RID を認識しないことを意味します。 プロジェクトをビルドすると、次のような (あるいは似た) エラーが表示されることがあります。

エラー NETSDK1083: 指定された RuntimeIdentifier、'win10-x64' が認識されません。 詳細については、「 https://aka.ms/netsdk1083 」を参照してください。

導入されたバージョン

.NET 8 RC 1

破壊的変更の種類

この変更は、動作変更であり、ソースの互換性にも影響を与える可能性があります。

変更理由

RID グラフは、保守と理解にコストがかかり、.NET 自体が脆弱な方法でディストリビューションに対応する必要がありました。 .NET チームとコミュニティは、グラフの更新と、以前のリリースへのこのような更新のバックポートに、多くの時間を費やしています。 長期的な目標は、RID グラフの更新を停止し、その読み取りを停止して、最終的にそれを削除することです。 この破壊的変更は、その目標に向けた一歩です。

ubuntu.16.04-<arch>osx.10.11-<arch> 及び win10-<arch> など、バージョン固有またはディストリビューション固有の RID の代わりに、 たとえば linux-<arch>linux-musl-<arch>osx-<arch>win-<arch> などの移植可能な RID を使用します。

プロジェクト ファイル (*.csproj、*.vbproj、または *.fsproj) で、RuntimeIdentifier の MSBuild プロパティを使用し RID を指定している場合は、それぞれに応じて変更します。 たとえば、プロジェクト ファイル内で <RuntimeIdentifier>win10-x64</RuntimeIdentifier><RuntimeIdentifier>win-x64</RuntimeIdentifier> に変更します。

<PropertyGroup>
  ...
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

RID をコマンド ライン引数として指定している場合も、同様の変更を行います。 たとえば、コマンド dotnet publish --framework net8.0 --runtime win10-x64 の代わりに dotnet publish --framework net8.0 --runtime win-x64 を使用します。

以前の完全な RID グラフを使用する前の動作に戻す必要がある場合は、プロジェクト ファイルで UseRidGraph MSBuild プロパティを true に設定できます。 ただし、前の RID グラフは、他のディストリビューションやアーキテクチャをハンドルするために今後更新されることはありません。

<PropertyGroup>
  <UseRidGraph>true</UseRidGraph>
</PropertyGroup>

関連項目