Katalog identifikátorů RID .NET

Identifikátor RID je zkratka pro identifikátor modulu runtime. Hodnoty identifikátorů RID se používají k identifikaci cílových platforem, ve kterých aplikace běží. Balíčky .NET je používají k reprezentaci prostředků specifických pro platformu v balíčcích NuGet. Následující hodnoty jsou příklady identifikátorů RID: linux-x64, win-x64nebo osx-x64. Pro balíčky s nativními závislostmi identifikátor RID určuje, na kterých platformách lze balíček obnovit.

Jeden identifikátor RID lze nastavit v elementu <RuntimeIdentifier> souboru projektu. Více identifikátorů RID lze definovat jako seznam oddělený středníkem v elementu <RuntimeIdentifiers> souboru projektu. Používají se také prostřednictvím --runtime možnosti s následujícími příkazy rozhraní příkazového řádku .NET:

Identifikátory RID, které představují konkrétní operační systémy, se obvykle řídí tímto vzorem: [os].[version]-[architecture]-[additional qualifiers] kde:

  • [os] je moniker operačního systému nebo platformy. Například ubuntu.

  • [version] je verze operačního systému ve formě čísla verze oddělené tečkou (.). Například 15.10.

    Verze by neměla být marketingová verze, protože marketingové verze často představují více diskrétních verzí operačního systému s různou plochou rozhraní API platformy.

  • [architecture] je architektura procesoru. Například: x86, x64, armnebo arm64.

  • [additional qualifiers] diferencovat různé platformy. Například: aot.

Graf identifikátorů RID

Graf RID nebo záložní graf modulu runtime je seznam identifikátorů RID, které jsou vzájemně kompatibilní.

Tyto identifikátory RID jsou definovány v PortableRuntimeIdentifierGraph.json v dotnet/sdk úložišti. V tomto souboru vidíte, že všechny identifikátory RID s výjimkou základního souboru obsahují "#import" příkaz. Tyto příkazy označují kompatibilní identifikátory RID.

Před verzí 8 se identifikátory RID specifické pro konkrétní verze a distribuce pravidelně přidaly do balíčku Microsoft.NETCore.Platforms a grafu RID v souboru runtime.json, který se nachází v dotnet/runtime úložišti. Tento graf se už neaktualizuje a existuje jako možnost zpětné kompatibility. Vývojáři by měli používat identifikátory RID, které nejsou specifické pro konkrétní verzi a nesouvisejí s distribucí.

Když NuGet obnoví balíčky, pokusí se najít přesnou shodu pro zadaný modul runtime. Pokud se přesná shoda nenajde, NuGet vrátí graf zpět, dokud nenajde nejbližší kompatibilní systém podle grafu IDENTIFIKÁTORŮ RID.

Následující příklad představuje skutečnou položku identifikátoru osx-x64 RID:

"osx-x64": {
    "#import": [ "osx", "unix-x64" ]
}

Výše uvedený identifikátor RID určuje, že osx-x64 importuje unix-x64. Takže když NuGet obnoví balíčky, pokusí se najít přesnou shodu pro osx-x64 balíček. Pokud NuGet nemůže najít konkrétní modul runtime, může například obnovit balíčky, které určují unix-x64 moduly runtime.

Následující příklad ukazuje mírně větší graf IDENTIFIKÁTORů RID definovaný také v souboru runtime.json :

    linux-arm64     linux-arm32
         |     \   /     |
         |     linux     |
         |       |       |
    unix-arm64   |    unix-x64
             \   |   /
               unix
                 |
                any

Případně můžete pomocí nástroje RidGraph snadno vizualizovat graf RID (nebo libovolnou podmnožinu grafu).

Všechna identifikátory RID se nakonec namapuje zpět na kořenové any identifikátory RID.

Při práci s nimi je potřeba vzít v úvahu některé důležité informace o identifikátorech RID:

  • Nepokoušejte se parsovat identifikátory RID za účelem načtení částí součástí.

  • Použijte identifikátory RID, které jsou už definované pro platformu.

  • Identifikátory RID musí být specifické, takže nepředpokládejte nic ze skutečné hodnoty identifikátoru RID.

  • Nevystavujte identifikátory RID programově, pokud to není nezbytně nutné.

    Některé aplikace musí programově vypočítat identifikátory RID. Pokud ano, vypočítané identifikátory RID musí přesně odpovídat katalogu, včetně velikosti velikosti a velikosti. Identifikátory RID s různými písmeny by způsobovaly problémy, když je operační systém citlivý na velká a malá písmena, například Linux, protože hodnota se často používá při vytváření věcí, jako jsou výstupní cesty. Představte si například vlastního průvodce publikováním v sadě Visual Studio, který spoléhá na informace z správce konfigurace řešení a vlastností projektu. Pokud konfigurace řešení předá neplatnou hodnotu, ARM64 například místo arm64, může vést k neplatnému identifikátoru RID, například win-ARM64.

Použití identifikátorů RID

Abyste mohli používat identifikátory RID, musíte vědět, které identifikátory RID existují. Nejnovější a kompletní verzi najdete v PortableRuntimeIdentifierGraph.json v dotnet/sdk úložišti.

Doporučenou volbou jsou identifikátory RID, které jsou považovány za přenosné – to znamená, že nejsou svázané s konkrétní verzí nebo distribucí operačního systému. To znamená, že přenosné identifikátory RID by se měly používat pro sestavení aplikace specifické pro platformu a vytvoření balíčku NuGet s prostředky specifickými pro identifikátory RID.

Počínaje rozhraním .NET 8 je výchozím chováním sady .NET SDK a modulu runtime pouze zvážení konkrétních verzí a nerekonstruovaných identifikátorů RID. Při obnovování a sestavování používá sada SDK menší přenosný graf IDENTIFIKÁTORů RID. Vrátí RuntimeInformation.RuntimeIdentifierplatformu, pro kterou byl modul runtime vytvořen. V době běhu rozhraní .NET najde prostředky specifické pro identifikátory RID pomocí známé sady přenosných identifikátorů RID. Při vytváření aplikace s prostředky specifickými pro identifikátory RID, které mohou být ignorovány za běhu, sada SDK vygeneruje upozornění: NETSDK1206.

Načítání prostředků pro konkrétní verzi nebo distribuci operačního systému

.NET se už nepokouší poskytovat prvotřídní podporu pro překlad závislostí specifických pro verzi nebo distribuci operačního systému. Pokud vaše aplikace nebo balíček potřebuje načíst různé prostředky na základě verze nebo distribuce operačního systému, měla by implementovat logiku pro podmíněné načtení prostředků.

Pokud chcete získat informace o platformě, použijte System.OperatingSystem rozhraní API. Ve Windows a macOS Environment.OSVersion vrátí verzi operačního systému. V Linuxu to může být verze jádra – získání názvu distribuce Linuxu a informací o verzi, doporučeným přístupem je přečíst soubor /etc/os-release .

.NET poskytuje různé body rozšíření pro přizpůsobení logiky načítání , NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver)například , AssemblyLoadContext.ResolvingUnmanagedDll, AssemblyLoadContext.Resolvinga AppDomain.AssemblyResolve. Ty se dají použít k načtení prostředku odpovídajícího aktuální platformě.

Známé identifikátory RID

Následující seznam ukazuje malou podmnožinu nejběžnějších identifikátorů RID používaných pro každý operační systém. Nejnovější a kompletní verzi najdete v PortableRuntimeIdentifierGraph.json v dotnet/sdk úložišti.

Identifikátory RID systému Windows

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

Další informace najdete v tématu Závislosti a požadavky .NET.

Identifikátory RID pro Linux

  • linux-x64 (Většina desktopových distribucí, jako je CentOS, Debian, Fedora, Ubuntu a deriváty)
  • linux-musl-x64 (Lightweight distributions using musl like Alpine Linux)
  • linux-musl-arm64 (Používá se k sestavení imagí Dockeru pro 64bitové image Arm v8 a minimalistické základní image)
  • linux-arm (Linuxové distribuce běžící na Arm, jako je Raspbian, na Raspberry Pi Model 2+)
  • linux-arm64 (Linuxové distribuce běžící na 64bitovém armu, jako je Ubuntu Server 64bitová verze na Raspberry Pi Model 3+)
  • linux-bionic-arm64 (Distribuce používající bionic libc androidu, například Termux)

Další informace najdete v tématu Závislosti a požadavky .NET.

identifikátory RID pro macOS

Identifikátory RID pro macOS používají starší značku OSX.

  • osx-x64 (Minimální verze operačního systému je macOS 10.12 Sierra)
  • osx-arm64

Další informace najdete v tématu Závislosti a požadavky .NET.

Identifikátory RID pro iOS

  • ios-arm64

Identifikátory RID androidu

  • android-arm64

Viz také