.NET RID 目錄

RID 對於執行時間識別碼 而言是短的 。 RID 值是用來識別應用程式執行所在的目標平台。 .NET 套件會使用它們來代表 NuGet 套件中的平台特定資產。 下列值為 RID 的範例: linux-x64win-x64osx-x64 。 針對具有原生相依性的套件,RID 也可指定能在哪些平台上還原套件。

單一 RID 可在您專案檔的 <RuntimeIdentifier> 元素中設定。 可以在專案檔的 <RuntimeIdentifiers> 元素中,將多個 RID 定義為以分號分隔的清單。 它們也會透過 --runtime 選項搭配下列 .NET CLI 命令 使用:

代表具體作業系統的 RID 通常遵循 [os].[version]-[architecture]-[additional qualifiers] 這個模式,其中:

  • [os] 是作業/平台系統 Moniker。 例如: ubuntu

  • [version] 是作業系統版本,使用以點分隔 (.) 的版本號碼表示。 例如: 15.10

    版本 不應該 是行銷版本,因為行銷版本通常代表具有不同平臺 API 介面區之作業系統的多個離散版本。

  • [architecture] 處理器架構。 例如:x86x64armarm64

  • [additional qualifiers] 進一步區分不同平台。 例如: aot

RID 圖表

RID 圖表或執行階段後援圖形是與彼此相容的 RID 清單。

這些 RID 定義于 存放庫中的 PortableRuntimeIdentifierGraph.json dotnet/sdk 中。 在此檔案中,您可以看到所有 RID (基底項目除外) 都包含 "#import" 陳述式。 這些陳述式指出相容的 RID。

在 .NET 8 之前,版本特定和散發版本專屬的 RID 會定期新增至 Microsoft.NETCore.Platform 套件,以及位於 dotnet/runtime 存放庫中的 runtime.json 檔案中的 RID 圖形。 此圖表已不再更新,且會以回溯相容性選項的形式存在。 開發人員應該 使用非版本特定和非散發版本特定的 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-arm32
         |     \   /     |
         |     linux     |
         |       |       |
    unix-arm64   |    unix-x64
             \   |   /
               unix
                 |
                any

或者,您可以使用 RidGraph 工具來輕鬆地視覺化 RID 圖形(或圖形的任何子集)。

所有的 RID 最終將對應至根 any RID。

處理 RID 時,您必須謹記一些考量:

  • 請勿嘗試剖析 RID 以擷取元件元件。

  • 使用已針對平台定義的 RID。

  • RID 必須是特定的,因此不要假設實際 RID 值會怎樣。

  • 除非絕對必要,否則請勿以程式設計方式建置 RID。

    某些應用程式需要以程式設計方式計算 RID。 如果是,計算的 RID 必須完全符合目錄,包括在大小寫中。 使用不同大小寫的 RID 會在 OS 區分大小寫時造成問題,例如 Linux,因為建構輸出路徑之類的專案時通常會使用 此值。 例如,請考慮 Visual Studio 中的自訂發佈精靈,其依賴解決方案組態管理員和專案屬性的資訊。 例如,如果解決方案組態傳遞不正確值, ARM64 而不是 arm64 ,可能會導致不正確 RID,例如 win-ARM64

使用 RID

若要使用 RID,必須先了解有哪些 RID 存在。 如需最新版本和完整版本,請參閱存放庫中的 dotnet/sdk PortableRuntimeIdentifierGraph.json 。

建議選擇被視為「可攜式」的 RID,也就是未系結至特定版本或 OS 散發套件。 這表示可攜式 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-release 檔案。

.NET 提供各種擴充點來自訂載入邏輯,例如 、 NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver)AssemblyLoadContext.ResolvingUnmanagedDllAssemblyLoadContext.ResolvingAppDomain.AssemblyResolve 。 這些可用來載入對應至目前平臺的資產。

已知的 RID

下列清單顯示用於每個 OS 的一小部分最常見 RID。 如需最新版本和完整版本,請參閱存放庫中的 dotnet/sdk PortableRuntimeIdentifierGraph.json 。

Windows RID

  • win-x64
  • win-x86
  • win-arm64

如需詳細資訊,請參閱 .NET 相依性和需求

Linux RID

  • linux-x64 (大部分桌面發行版本,例如 CentOS、Debian、Fedora、Ubuntu 和衍生產品)
  • linux-musl-x64 (使用 musl 的輕量發行版本,如 Alpine Linux)
  • linux-arm (在 Arm 上執行的 Linux 散發套件,例如 Raspberry Pi 模型 2+ 上的 Raspbian)
  • linux-arm64 (在 64 位 Arm 上執行的 Linux 散發套件,例如 Raspberry Pi 模型 3+ 上的 Ubuntu Server 64 位)
  • linux-bionic-arm64 (使用 Android 的仿生 libc 的發行版本,例如 Termux)

如需詳細資訊,請參閱 .NET 相依性和需求

macOS RID

macOS RID 使用較舊的 "OSX" 商標。

  • osx-x64 (最低 OS 版本為 macOS 10.12 Sierra)
  • osx-arm64

如需詳細資訊,請參閱 .NET 相依性和需求

iOS RID

  • ios-arm64

Android RID

  • android-arm64

另請參閱