.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-x64vagy 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:

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

  • [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.jsondotnet/sdk 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 a Microsoft.NETCore.Platforms csomaghoz és az adattárban dotnet/runtime található runtime.json fájl RID-gráfjához. 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-x64unix-x64hatá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 ahelyettarm64, ARM64 hogy érvénytelen RID-t eredményezne, például win-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/sdk.

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, 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/sdk.

Windows RID-k

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

További információ: .NET-függőségek és követelmények.

Linuxos RID-k

  • linux-x64 (A legtöbb asztali disztribúció, például a CentOS, 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)

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

AndroidOS RID-k

  • android-arm64

Lásd még