.NET RID 目錄
RID 對於執行時間識別碼 而言是短的 。 RID 值是用來識別應用程式執行所在的目標平台。
.NET 套件會使用它們來代表 NuGet 套件中的平台特定資產。 下列值為 RID 的範例: linux-x64
、 win-x64
或 osx-x64
。
針對具有原生相依性的套件,RID 也可指定能在哪些平台上還原套件。
單一 RID 可在您專案檔的 <RuntimeIdentifier>
元素中設定。 可以在專案檔的 <RuntimeIdentifiers>
元素中,將多個 RID 定義為以分號分隔的清單。 它們也會透過 --runtime
選項搭配下列 .NET CLI 命令 使用:
代表具體作業系統的 RID 通常遵循 [os].[version]-[architecture]-[additional qualifiers]
這個模式,其中:
[os]
是作業/平台系統 Moniker。 例如:ubuntu
。[version]
是作業系統版本,使用以點分隔 (.
) 的版本號碼表示。 例如:15.10
。版本 不應該 是行銷版本,因為行銷版本通常代表具有不同平臺 API 介面區之作業系統的多個離散版本。
[architecture]
處理器架構。 例如:x86
、x64
、arm
或arm64
。[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.ResolvingUnmanagedDll 、 AssemblyLoadContext.Resolving 和 AppDomain.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
另請參閱
.NET feedback
The .NET documentation is open source. Provide feedback here.
意見反應
提交並檢視相關的意見反應