.NET RID-katalógus
A RID a futtatókörnyezet azonosítójának rövidítése. A RID-értékek az alkalmazás által futtatott célplatformok azonosítására szolgálnak.
A .NET-csomagok platformspecifikus objektumokat jelölnek a NuGet-csomagokban. A következő értékek példák a következő azonosítókra: linux-x64
, win-x64
vagy osx-x64
.
A natív függőségekkel rendelkező csomagok esetében a RID meghatározza, hogy a csomag mely platformokon állítható vissza.
A projektfájl elemében <RuntimeIdentifier>
egyetlen RID állítható be. Több RID is definiálható pontosvesszővel tagolt listaként a projektfájl elemében <RuntimeIdentifiers>
. Az alábbi .NET CLI-parancsokkal is használhatók--runtime
:
- dotnet build
- dotnet clean
- dotnet pack
- dotnet publish
- dotnet-visszaállítás
- dotnet-futtatás
- dotnet store
A konkrét operációs rendszereket képviselő RID-k általában ezt a mintát követik: [os].[version]-[architecture]-[additional qualifiers]
ahol:
[os]
az operációs/platformrendszer-moniker. Például:ubuntu
.[version]
az operációs rendszer verziója ponttól elválasztott (.
) verziószám formájában. Például:15.10
.A verzió nem lehet marketingverzió, mivel a marketingverziók gyakran az operációs rendszer több különálló verzióját képviselik különböző platform API felülettel.
[architecture]
a processzorarchitektúra. Például:x86
,x64
,arm
vagyarm64
.[additional qualifiers]
a különböző platformok további megkülönböztetése. Például:aot
RID-diagram
A RID-gráf vagy a futtatókörnyezet tartalék gráfja az egymással kompatibilis RID-k listája.
Ezeket a TÁRAKAT az adattár PortableRuntimeIdentifierGraph.json dotnet/runtime
definiálja. Ebben a fájlban láthatja, hogy az összes RID az alapszintű kivételével tartalmaz egy utasítást "#import"
. Ezek az utasítások kompatibilis RID-ket jeleznek.
A .NET 8 előtt a rendszer rendszeresen hozzáadta a verzióspecifikus és disztribúcióspecifikus RID-ket az adattárban dotnet/runtime
található runtime.json fájlhoz. Ez a gráf már nem frissül, és visszamenőleges kompatibilitási lehetőségként létezik. A fejlesztőknek nem verzióspecifikus és nem disztribúciós azonosítókat kell használniuk.
Amikor a NuGet visszaállítja a csomagokat, megpróbálja megtalálni a megadott futtatókörnyezet pontos egyezését. Ha nem talál pontos egyezést, a NuGet visszavezeti a gráfot, amíg meg nem találja a legközelebbi kompatibilis rendszert a RID-gráf szerint.
A következő példa a RID tényleges bejegyzése osx-x64
:
"osx-x64": {
"#import": [ "osx", "unix-x64" ]
}
A fenti RID az importálást osx-x64
unix-x64
határozza meg. Így amikor a NuGet visszaállítja a csomagokat, megpróbál pontos egyezést osx-x64
találni a csomagban. Ha a NuGet nem találja az adott futtatókörnyezetet, visszaállíthatja például a futtatókörnyezeteket meghatározó unix-x64
csomagokat.
Az alábbi példa egy kissé nagyobb RID-diagramot mutat be, amely szintén a runtime.json fájlban van definiálva:
linux-arm64 linux-arm32
| \ / |
| linux |
| | |
unix-arm64 | unix-x64
\ | /
unix
|
any
Másik lehetőségként a RidGraph eszközzel egyszerűen megjelenítheti a RID-gráfot (vagy a gráf bármely részhalmazát).
Az összes RID végül vissza van képezve a gyökér any
RID-hez.
A biztonsági azonosítókkal kapcsolatban figyelembe kell vennie néhány szempontot, amelyeket figyelembe kell vennie a velük végzett munka során:
Ne próbálja elemezni a RID-ket az összetevők lekéréséhez.
Használja a platformhoz már definiált RID-ket.
Az azonosítóknak konkrétaknak kell lenniük, ezért ne feltételezz semmit a tényleges RID-értékből.
Ne hozzon létre riD-ket programozott módon, hacsak nem feltétlenül szükséges.
Egyes alkalmazásoknak programozott módon kell kiszámítaniuk a RID-ket. Ha igen, a kiszámított RID-knek pontosan meg kell egyeznie a katalógussal, beleértve a burkolatot is. A különböző burkolattal rendelkező RID-k problémákat okozhatnak, ha az operációs rendszer megkülönbözteti a kis- és nagybetűket, például Linux esetén, mivel az értéket gyakran használják a kimeneti útvonalak létrehozásakor. Vegyük például egy egyéni közzétételi varázslót a Visual Studióban, amely a megoldáskonfiguráció-kezelő és a projekttulajdonságok információira támaszkodik. Ha a megoldáskonfiguráció érvénytelen értéket ad át, például ahelyett
arm64
,ARM64
hogy érvénytelen RID-t eredményezne, példáulwin-ARM64
.
RID-k használata
A RID-k használatához tudnia kell, hogy mely azonosítók léteznek. A legújabb és teljes verzióért tekintse meg az adattár PortableRuntimeIdentifierGraph.jsondotnet/runtime
.
A "hordozhatónak" minősülő , azaz nem egy adott verzióhoz vagy operációsrendszer-disztribúcióhoz kapcsolódó RID-k ajánlottak. Ez azt jelenti, hogy hordozható RID-ket kell használni egy platformspecifikus alkalmazás létrehozásához és egy NuGet-csomag létrehozásához RID-specifikus eszközökkel.
A .NET 8-tól kezdve a .NET SDK és a futtatókörnyezet alapértelmezett viselkedése csak a nem verzióspecifikus és a nem disztribúcióspecifikus RID-k figyelembe kérése. A visszaállítás és az építés során az SDK egy kisebb hordozható RID-gráfot használ. A RuntimeInformation.RuntimeIdentifier függvény azt a platformot adja vissza, amelyhez a futtatókörnyezet készült. Futásidőben a .NET rid-specifikus objektumokat keres egy ismert hordozható RID-készlet használatával. Amikor olyan, RID-specifikus objektumokat tartalmazó alkalmazást hoz létre, amelyet futásidőben figyelmen kívül hagyhat, az SDK figyelmeztetést küld: NETSDK1206.
Eszközök betöltése adott operációsrendszer-verzióhoz vagy -disztribúcióhoz
A .NET már nem próbál első osztályú támogatást nyújtani az operációs rendszer verziójára vagy terjesztésére vonatkozó függőségek feloldásához. Ha az alkalmazásnak vagy a csomagnak különböző eszközöket kell betöltenie az operációs rendszer verziója vagy terjesztése alapján, az eszközök feltételes betöltéséhez implementálnia kell a logikát.
A platformmal kapcsolatos információk beszerzéséhez használja System.OperatingSystem az API-kat. Windows és macOS Environment.OSVersion rendszeren az operációs rendszer verzióját adja vissza. Linuxon ez lehet a kernel verziója – a Linux disztribúció nevének és verzióadatainak lekéréséhez ajánlott a /etc/os kiadási fájl olvasása.
A .NET különböző bővítménypontokat biztosít a betöltési logika testreszabásához – NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver)például , , AssemblyLoadContext.ResolvingAssemblyLoadContext.ResolvingUnmanagedDllés AppDomain.AssemblyResolve. Ezekkel betölthető az aktuális platformnak megfelelő objektum.
Ismert RID-k
Az alábbi listában az egyes operációs rendszerekhez használt leggyakoribb RID-k egy kis része látható. A legújabb és teljes verzióért tekintse meg az adattár PortableRuntimeIdentifierGraph.jsondotnet/runtime
.
Windows RID-k
win-x64
win-x86
win-arm64
További információ: .NET telepítése Windows rendszeren.
Linuxos RID-k
linux-x64
(A legtöbb asztali disztribúció, például a CentOS Stream, a Debian, a Fedora, az Ubuntu és a származékok)linux-musl-x64
(Egyszerűsített disztribúciók musl, például Alpine Linux használatával)linux-musl-arm64
(Docker-rendszerképek 64 bites Arm v8-hoz és minimalista alaprendszerképekhez)linux-arm
(Armen futó Linux-disztribúciók, például Raspbian a Raspberry Pi Model 2+-on)linux-arm64
(64 bites Armen futó Linux-disztribúciók, például Ubuntu Server 64 bites Raspberry Pi Model 3+)linux-bionic-arm64
(Az Android bionic libc-jét használó disztribúciók, például a Termux)linux-loongarch64
(A LoongArch64-en futó Linux-disztribúciók)
További információ: .NET-függőségek és követelmények.
macOS RID-k
a macOS RID-k a régebbi "OSX" márkajelzést használják.
osx-x64
(Az operációs rendszer minimális verziója macOS 10.12 Sierra)osx-arm64
További információ: .NET-függőségek és követelmények.
iOS-beli RID-k
ios-arm64
iossimulator-arm64
iossimulator-x64
AndroidOS RID-k
android-arm64
android-arm
android-x64
android-x86