Wykaz identyfikatorów RID platformy .NET

Identyfikator RID to skrót od identyfikatora środowiska uruchomieniowego. Wartości identyfikatorów RID służą do identyfikowania platform docelowych, na których działa aplikacja. Są one używane przez pakiety .NET do reprezentowania zasobów specyficznych dla platformy w pakietach NuGet. Następujące wartości to przykłady identyfikatorów ZAREZERWOWANYch: linux-x64, win-x64lub osx-x64. W przypadku pakietów z natywnymi zależnościami identyfikator RID wyznacza platformy, na których można przywrócić pakiet.

Pojedynczy identyfikator RID można ustawić w elemecie <RuntimeIdentifier> pliku projektu. Wiele identyfikatorów ZAREZERWOWANYch można zdefiniować jako listę rozdzielaną średnikami w elemecie pliku <RuntimeIdentifiers> projektu. Są one również używane za pośrednictwem opcji z następującymi poleceniami interfejsu --runtime wiersza polecenia platformy .NET:

Identyfikatory ZAREZERWOWANE reprezentujące konkretne systemy operacyjne zwykle są zgodne z następującym wzorcem: [os].[version]-[architecture]-[additional qualifiers] gdzie:

  • [os] to pseudonim systemu operacyjnego/platformy. Na przykład ubuntu.

  • [version] jest wersją systemu operacyjnego w postaci numeru wersji rozdzielanej kropką (.). Na przykład 15.10.

    Wersja nie powinna być wersją marketingową, ponieważ wersje marketingowe często reprezentują wiele odrębnych wersji systemu operacyjnego z różnym obszarem powierzchni interfejsu API platformy.

  • [architecture] jest architekturą procesora. Na przykład: x86, , armx64lub arm64.

  • [additional qualifiers] rozróżniać różne platformy. Na przykład: aot.

Wykres RID

Wykres rid lub wykres rezerwowy środowiska uruchomieniowego to lista identyfikatorów ZAREZERWOWANYch, które są ze sobą zgodne.

Te identyfikatory ZAREZERWOWANE są definiowane w PortableRuntimeIdentifierGraph.json w dotnet/sdk repozytorium. W tym pliku widać, że wszystkie identyfikatory ZAREZERWOWANE, z wyjątkiem podstawowego, zawierają instrukcję "#import" . Te instrukcje wskazują zgodne identyfikatory ZAREZERWOWANE.

Przed platformą .NET 8 identyfikatory RID specyficzne dla wersji i dystrybucji były regularnie dodawane do pakietu Microsoft.NETCore.Platforms i grafu RID w pliku runtime.json, który znajduje się w dotnet/runtime repozytorium. Ten wykres nie jest już aktualizowany i istnieje jako opcja zgodności z poprzednimi wersjami. Deweloperzy powinni używać identyfikatorów ZAREZERWOWANYch, które nie są specyficzne dla wersji i nie są specyficzne dla dystrybucji.

Podczas przywracania pakietów NuGet próbuje znaleźć dokładne dopasowanie dla określonego środowiska uruchomieniowego. Jeśli nie można odnaleźć dokładnego dopasowania, narzędzie NuGet przywraca graf, dopóki nie znajdzie najbliższego zgodnego systemu zgodnie z grafem RID.

Poniższy przykład to rzeczywisty wpis identyfikatora osx-x64 RID:

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

Powyższy identyfikator RID określa, że osx-x64 importuje unix-x64element . Dlatego podczas przywracania pakietów NuGet próbuje znaleźć dokładne dopasowanie osx-x64 w pakiecie. Jeśli pakiet NuGet nie może znaleźć określonego środowiska uruchomieniowego, może przywrócić pakiety określające unix-x64 na przykład środowiska uruchomieniowe.

W poniższym przykładzie pokazano nieco większy graf RID zdefiniowany również w pliku runtime.json :

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

Alternatywnie możesz użyć narzędzia RidGraph , aby łatwo wizualizować graf RID (lub dowolny podzestaw grafu).

Wszystkie identyfikatory RID ostatecznie są mapowane z powrotem na główny any identyfikator RID.

Podczas pracy z nimi należy wziąć pod uwagę pewne zagadnienia dotyczące identyfikatorów ZAREZERWOWANYch:

  • Nie próbuj analizować identyfikatorów ZAREZERWOWANYch w celu pobrania części składników.

  • Użyj identyfikatorów ZAREZERWOWANYch, które są już zdefiniowane dla platformy.

  • Identyfikatory RID muszą być specyficzne, więc nie zakładaj niczego od rzeczywistej wartości identyfikatora RID.

  • Nie twórz identyfikatorów ZAREZERWOWANYch programowo, chyba że jest to absolutnie konieczne.

    Niektóre aplikacje muszą programowo obliczyć identyfikatory ZAREZERWOWANE. Jeśli tak, obliczone identyfikatory ZAREZERWOWANE muszą być dokładnie zgodne z wykazem, łącznie z wielkością liter. Identyfikatory URI z inną wielkością liter powodują problemy, gdy system operacyjny ma wielkość liter, na przykład w systemie Linux, ponieważ wartość jest często używana podczas konstruowania elementów, takich jak ścieżki wyjściowe. Rozważmy na przykład niestandardowego kreatora publikowania w programie Visual Studio, który opiera się na informacjach z menedżera konfiguracji rozwiązania i właściwości projektu. Jeśli konfiguracja rozwiązania przekazuje nieprawidłową wartość, ARM64 na przykład zamiast arm64, może to spowodować nieprawidłowy identyfikator RID, taki jak win-ARM64.

Korzystanie z identyfikatorów ZAREZERWOWANYch

Aby móc używać identyfikatorów RID, musisz wiedzieć, które identyfikatory ZAREZERWOWANE istnieją. Aby uzyskać najnowszą i kompletną wersję, zobacz PortableRuntimeIdentifierGraph.json w dotnet/sdk repozytorium.

Identyfikatory ZAREZERWOWANE, które są uważane za "przenośne", czyli nie są powiązane z określoną wersją lub dystrybucją systemu operacyjnego , są zalecanym wyborem. Oznacza to, że przenośne identyfikatory RID powinny być używane zarówno do tworzenia aplikacji specyficznej dla platformy, jak i tworzenia pakietu NuGet z zasobami specyficznymi dla identyfikatorów RID.

Począwszy od platformy .NET 8, domyślne zachowanie zestawu .NET SDK i środowiska uruchomieniowego polega na rozważeniu tylko identyfikatorów ZAREZERWOWANYch specyficznych dla wersji i innych niż specyficzne dla dystrybucji. Podczas przywracania i kompilowania zestaw SDK używa mniejszego przenośnego grafu RID. Zwraca RuntimeInformation.RuntimeIdentifierplatformę, dla której utworzono środowisko uruchomieniowe. W czasie wykonywania platforma .NET znajduje zasoby specyficzne dla identyfikatorów RID przy użyciu znanego zestawu przenośnych identyfikatorów RID. Podczas kompilowania aplikacji z zasobami specyficznymi dla identyfikatorów RID, które mogą być ignorowane w czasie wykonywania, zestaw SDK będzie emitować ostrzeżenie: NETSDK1206.

Ładowanie zasobów dla określonej wersji lub dystrybucji systemu operacyjnego

Platforma .NET nie próbuje już zapewnić najwyższej klasy obsługi rozpoznawania zależności specyficznych dla wersji lub dystrybucji systemu operacyjnego. Jeśli aplikacja lub pakiet musi załadować różne zasoby na podstawie wersji lub dystrybucji systemu operacyjnego, należy zaimplementować logikę w celu warunkowego ładowania zasobów.

Aby uzyskać informacje o platformie, użyj System.OperatingSystem interfejsów API. W systemach Windows i macOS Environment.OSVersion zostanie zwrócona wersja systemu operacyjnego. W systemie Linux może to być wersja jądra — aby uzyskać informacje o nazwie dystrybucji i wersji systemu Linux, zalecaną metodą jest odczytanie pliku /etc/os-release .

Platforma .NET udostępnia różne punkty rozszerzenia do dostosowywania logiki ładowania — na przykład NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver), AssemblyLoadContext.ResolvingAssemblyLoadContext.ResolvingUnmanagedDlli AppDomain.AssemblyResolve. Mogą one służyć do ładowania zasobu odpowiadającego bieżącej platformie.

Znane identyfikatory ZAREZERWOWANE

Na poniższej liście przedstawiono niewielki podzestaw najczęściej używanych identyfikatorów ZAREZERWOWANYch dla każdego systemu operacyjnego. Aby uzyskać najnowszą i kompletną wersję, zobacz PortableRuntimeIdentifierGraph.json w dotnet/sdk repozytorium.

Identyfikatory ZAREZERWOWANE systemu Windows

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

Aby uzyskać więcej informacji, zobacz .NET dependencies and requirements (Zależności i wymagania dotyczące platformy .NET).

Identyfikatory ZAREZERWOWANE systemu Linux

  • linux-x64 (Większość dystrybucji klasycznych, takich jak CentOS, Debian, Fedora, Ubuntu i pochodne)
  • linux-musl-x64 (Uproszczone dystrybucje przy użyciu musl , takich jak Alpine Linux)
  • linux-musl-arm64 (Służy do kompilowania obrazów platformy Docker dla 64-bitowych obrazów podstawowych arm w wersji 8 i minimalistycznych)
  • linux-arm (Dystrybucje systemu Linux działające na ramieniu, takie jak Raspbian w urządzeniu Raspberry Pi Model 2+)
  • linux-arm64 (Dystrybucje systemu Linux działające na 64-bitowej wersji arm, takie jak Ubuntu Server 64-bitowy w systemie Raspberry Pi Model 3+)
  • linux-bionic-arm64 (Dystrybucje przy użyciu bionic libc systemu Android, na przykład Termux)

Aby uzyskać więcej informacji, zobacz .NET dependencies and requirements (Zależności i wymagania dotyczące platformy .NET).

Identyfikatory ZAREZERWOWANE systemu macOS

Identyfikatory RID systemu macOS używają starszego znakowania "OSX".

  • osx-x64 (Minimalna wersja systemu operacyjnego to macOS 10.12 Sierra)
  • osx-arm64

Aby uzyskać więcej informacji, zobacz .NET dependencies and requirements (Zależności i wymagania dotyczące platformy .NET).

Identyfikatory ZAREZERWOWANE systemu iOS

  • ios-arm64

Identyfikatory ZAREZERWOWANE systemu Android

  • android-arm64

Zobacz też