.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 az 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ájlban a <RuntimeIdentifier> elem egyetlen RID-et állíthat be. Több RID is definiálható pontosvesszővel tagolt listaként a projektfájl elemében <RuntimeIdentifiers> . Az alábbi --runtime is használhatók:

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 vagy platformrendszer neve. 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, armvagy arm64.

  • [additional qualifiers] a különböző platformok további megkülönböztetése. Például: aot

RID-grafikon

A RID-gráf vagy futási idejű tartalék gráf az egymással kompatibilis RID-ek listája.

Ezek a RIDs a PortableRuntimeIdentifierGraph.jsondotnet/runtime adattárban vannak definiálva. 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.jsonfá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 osx-x64 RID tényleges bejegyzése:

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

A fenti RID meghatározza, hogy osx-x64 importálja unix-x64. Így amikor a NuGet csomagokat állít vissza, megpróbál pontos egyezést találni a osx-x64 elemre 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-gráfot mutat be, amely szintén a runtime.json fájlban van definiálva:

    linux-arm64     linux-x64
         |     \   /     |
         |     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 vannak vezetve a gyökér any RID-hez.

Munkájuk során az RID-kkel kapcsolatban figyelembe kell venni néhány szempontot:

  • 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 ARM64 ahelyett, hogy arm64, az érvénytelen RID-t eredményezhet, például win-ARM64.

RID-k használata

A RID-ek használatához tudnia kell, hogy mely RID-ek léteznek. A legújabb és teljes verzióért tekintse meg a adattárban található dotnet/runtime fájlt.

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.RuntimeIdentifierfü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, amely 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 – például NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver), AssemblyLoadContext.ResolvingUnmanagedDll, AssemblyLoadContext.Resolving é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 a adattárban található dotnet/runtime fájlt.

Windows RID-k

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

További információ: .NET telepítése Windows rendszeren.

Linux RID-ek

  • 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 (Linux-disztribúciók az Arm architektúrán futva, például a Raspbian a Raspberry Pi Model 2+-on)
  • linux-arm64 (Linux-disztribúciók, amelyek 64 bites Arm rendszeren futnak, például 64 bites Ubuntu Server a Raspberry Pi Model 3+-on)
  • linux-bionic-arm64 (Az Android bionic libc-jét használó disztribúciók, például a Termux)
  • linux-loongarch64 (Linux-disztribúciók LoongArch64-en futva)

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

Android RID-ek

  • android-arm64
  • android-arm
  • android-x64
  • android-x86

Lásd még