RID は ランタイム識別子の略です。 RID の値は、アプリケーションが実行されている対象プラットフォームの識別に使用されます。
これは NuGet パッケージのプラットフォーム固有のアセットを表すために、.NET パッケージによって使用されます。 RID は、たとえば linux-x64
、win-x64
、または osx-x64
などの値です。
ネイティブ依存関係のあるパッケージの場合、パッケージを復元できるプラットフォームが RID によって指定されます。
プロジェクト ファイルの <RuntimeIdentifier>
要素では、1 つの RID を設定できます。 複数の RID は、プロジェクト ファイルの <RuntimeIdentifiers>
要素でセミコロン区切りのリストとして定義できます。 また、次の --runtime
を使用して、 オプションを使用して使用することもできます。
具体的なオペレーティング システムを表す RID は通常、[os].[version]-[architecture]-[additional qualifiers]
のようなパターンになります。それぞれ、次のような意味があります。
[os]
はオペレーティング システムまたはプラットフォーム システムのモニカーです。 たとえば、ubuntu
のようにします。[version]
は、オペレーティング システムのバージョンをドット区切りの形式 (.
) で表したバージョン番号です。 たとえば、15.10
のようにします。マーケティング バージョンは、多くの場合、プラットフォーム API のサーフェス領域が異なる複数の個別バージョンのオペレーティング システムを表すので、バージョンをマーケティング バージョンに することはできません 。
[architecture]
はプロセッサ アーキテクチャです。 たとえばx86
、x64
、arm
またはarm64
などです。[additional qualifiers]
はさまざまなプラットフォームをさらに区別します。 たとえば、aot
のように指定します。
RID グラフ
RID グラフまたはランタイム フォールバック グラフとは、相互に互換性のある RID の一覧です。
これらの RID は、 リポジトリの dotnet/runtime
で定義されます。 このファイルでは、基本となる RID を除くすべての RID に "#import"
ステートメントが記述されていることを確認できます。 このステートメントは互換性のある RID を示しています。
.NET 8 より前では、バージョン固有およびディストリビューション固有の RID がdotnet/runtime
リポジトリにあるruntime.jsonファイルに定期的に追加されていました。 このグラフは現在更新されておらず、下位互換性オプションとして存在しています。 開発者は 、バージョン固有およびディストリビューション固有ではない RID を使用する必要があります。
NuGet はパッケージを復元する際、指定されたランタイムと正確に一致するものを見つけようとします。 正確に一致するものが見つからない場合、NuGet は、RID グラフに基づいて最も互換性のあるシステムが見つかるまでグラフを遡ります。
次に示す例は、osx-x64
の RID として実際に記述されているものです。
"osx-x64": {
"#import": [ "osx", "unix-x64" ]
}
上の RID は osx-x64
が unix-x64
をインポートすることを指定します。 そのため、NuGet はパッケージを復元する際、osx-x64
と正確に一致するものをパッケージから見つけようとします。 特定のランタイムが見つからなかった場合、NuGet は、たとえば unix-x64
ランタイムを指定しているパッケージを復元できます。
次の例は、 runtime.json ファイルにも定義されている、少し大きい RID グラフを示しています。
linux-arm64 linux-x64
| \ / |
| linux |
| | |
unix-arm64 | unix-x64
\ | /
unix
|
any
または、 RidGraph ツールを使用して、RID グラフ (またはグラフの任意のサブセット) を簡単に視覚化することもできます。
すべての RID は最終的にルート any
RID にマッピングされます。
RID を使用する際に留意しておく必要のある注意事項があります。
コンポーネント パーツを取得する目的で RID を解析する行為はお止めください。
プラットフォームであらかじめ定義されている RID を使用します。
RID は特定の値である必要があるため、実際の値から推測した値にしないでください。
絶対に必要でない限り、プログラムで RID を作成しないでください。
一部のアプリでは、プログラムで RID を計算する必要があります。 その場合、計算された RID は、大文字と小文字の区別を含め、カタログと正確に一致する必要があります。 大文字と小文字が異なる RID は、OS で大文字と小文字が区別される場合 (Linux など) に問題が発生する原因となります。この値は、出力パスなどを作成するときに使用されることが多いためです。 たとえば、ソリューション構成マネージャーとプロジェクトのプロパティからの情報に依存する、Visual Studio のカスタム発行ウィザードを考えてみましょう。 たとえば、ソリューション構成から無効な値 (たとえば、
ARM64
の代わりにarm64
) が渡された場合、win-ARM64
などの無効な RID が生成されるおそれがあります。
RID の使用
RID を使用するには、どのような RID があるのか知る必要があります。 最新の完全なバージョンについては、 リポジトリの dotnet/runtime
を参照してください。
'移植可能' とみなされる RID、つまり特定のバージョンや OS ディストリビューションに関連付けられていない RID が推奨される選択肢です。 つまり、移植可能な RID は、 プラットフォーム固有のアプリケーションの構築 と、RID 固有の 資産を使用した NuGet パッケージの作成の両方に使用する必要があります。
.NET 8 以降、.NET SDK およびランタイムの既定の動作では、バージョン固有およびディストリビューション固有ではない RID のみが考慮されます。 復元とビルド時に、SDK は小さいポータブル RID グラフを使用します。 RuntimeInformation.RuntimeIdentifier ランタイムがビルドされたプラットフォームを返します。 実行時に、.NET は既知の ポータブル RID セットを使用して RID 固有の資産を検索します。 実行時に無視される可能性がある RID 固有のアセットを使用してアプリケーションをビルドすると、SDK によって警告が生成されます: NETSDK1206。
特定の OS バージョンまたはディストリビューションのアセットの読み込み
.NET は、OS バージョンまたはディストリビューションに固有の依存関係を解決するための最上級のサポートを提供することを試みなくなりました。 アプリケーションまたはパッケージが OS のバージョンまたはディストリビューションに基づいて異なるアセットを読み込む必要がある場合は、条件付きでアセットを読み込むロジックを実装する必要があります。
プラットフォームに関する情報を取得するには、System.OperatingSystem API を使用します。 Windows と macOS では、Environment.OSVersionはオペレーティング システムのバージョンを返します。 Linux では、カーネル バージョンである可能性があります。Linux ディストリビューション名とバージョン情報を取得するには、 /etc/os リリース ファイルを読み取ることをお勧めします。
.NET は、読み込みロジックをカスタマイズするためのさまざまな拡張ポイント (NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver)、AssemblyLoadContext.ResolvingUnmanagedDll、AssemblyLoadContext.Resolving、AppDomain.AssemblyResolve など) を提供しています。 これらを使用して、現在のプラットフォームに対応する資産を読み込むことができます。
既知の RID
次の一覧では、各 OS に使用される最も一般的な RID の小さいサブセットを示します。 最新の完全なバージョンについては、 リポジトリの dotnet/runtime
を参照してください。
Windows RID
win-x64
win-x86
win-arm64
詳細については、「 Windows への .NET のインストール」を参照してください。
Linux RID
-
linux-x64
(CentOS Stream、Debian、Fedora、Ubuntu、および派生ディストリビューションなどのほとんどのデスクトップ ディストリビューション) -
linux-musl-x64
(Alpine Linux のような musl を使用した軽量ディストリビューション) -
linux-musl-arm64
(64 ビット Arm v8 向けの Docker イメージと最小限主義のベース イメージのビルドに使用) -
linux-arm
(Raspberry Pi Model 2+ 上の Raspbian など、Arm で実行されている Linux ディストリビューション) -
linux-arm64
(Raspberry Pi Model 3+ 上の Ubuntu Server 64 ビットなど、64 ビット Arm で実行されている Linux ディストリビューション) -
linux-bionic-arm64
(Termux など、Android の bionic libc を使用したディストリビューション) -
linux-loongarch64
(LoongArch64 で実行されている Linux ディストリビューション)
詳細については、「 .NET の依存関係と要件」を参照してください。
macOS RID
macOS RID では、以前の "OSX" ブランドが使用されています。
-
osx-x64
(最小 OS バージョンは、macOS 10.12 Sierra です) osx-arm64
詳細については、「 .NET の依存関係と要件」を参照してください。
iOS RID
ios-arm64
iossimulator-arm64
iossimulator-x64
Android RID
android-arm64
android-arm
android-x64
android-x86
関連項目
.NET