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-x64
lub 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ładubuntu
.[version]
jest wersją systemu operacyjnego w postaci numeru wersji rozdzielanej kropką (.
). Na przykład15.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
, ,arm
x64
lubarm64
.[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/runtime
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 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-x64
element . 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 zamiastarm64
, może to spowodować nieprawidłowy identyfikator RID, taki jakwin-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/runtime
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.RuntimeIdentifier platformę, 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/runtime
repozytorium.
Identyfikatory ZAREZERWOWANE systemu Windows
win-x64
win-x86
win-arm64
Aby uzyskać więcej informacji, zobacz Instalowanie platformy .NET w systemie Windows.
Identyfikatory ZAREZERWOWANE systemu Linux
linux-x64
(Większość dystrybucji klasycznych, takich jak CentOS Stream, 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)linux-loongarch64
(Dystrybucje systemu Linux działające w systemie LoongArch64)
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
iossimulator-arm64
iossimulator-x64
Identyfikatory ZAREZERWOWANE systemu Android
android-arm64
android-arm
android-x64
android-x86