Share via


.NET RID-katalog

RID är kort för körningsidentifierare. RID-värden används för att identifiera målplattformar där programmet körs. De används av .NET-paket för att representera plattformsspecifika tillgångar i NuGet-paket. Följande värden är exempel på RID:er: linux-x64, win-x64eller osx-x64. För paket med inbyggda beroenden anger RID på vilka plattformar paketet kan återställas.

En enda RID kan anges i elementet <RuntimeIdentifier> i projektfilen. Flera RID:er kan definieras som en semikolonavgränsad lista i projektfilens <RuntimeIdentifiers> element. De används också via --runtime alternativet med följande .NET CLI-kommandon:

RID:erna som representerar konkreta operativsystem följer vanligtvis det här mönstret: [os].[version]-[architecture]-[additional qualifiers] där:

  • [os] är monikern för operativsystem/plattformssystem. Exempel: ubuntu

  • [version] är operativsystemversionen i form av ett punktavgränsat (.) versionsnummer. Exempel: 15.10

    Versionen bör inte vara en marknadsföringsversion, eftersom marknadsföringsversioner ofta representerar flera diskreta versioner av operativsystemet med varierande plattforms-API-yta.

  • [architecture] är processorarkitekturen. Till exempel: x86, x64, armeller arm64.

  • [additional qualifiers] ytterligare särskilja olika plattformar. Exempel: aot.

RID-graf

RID-grafen eller körningsåterställningsdiagrammet är en lista över RID:er som är kompatibla med varandra.

Dessa RID:er definieras i PortableRuntimeIdentifierGraph.json på lagringsplatsen dotnet/sdk . I den här filen kan du se att alla RID:er, förutom den grundläggande, innehåller en "#import" -instruktion. Dessa instruktioner anger kompatibla RID:er.

Innan .NET 8 lades versionsspecifika och distributionsspecifika RID:er regelbundet till i paketet Microsoft.NETCore.Platforms och RID-grafen i filen runtime.json, som finns på dotnet/runtime lagringsplatsen. Det här diagrammet uppdateras inte längre och finns som ett bakåtkompatibilitetsalternativ. Utvecklare bör använda RID:er som inte är versionsspecifika och icke-distributionsspecifika.

När NuGet återställer paket försöker den hitta en exakt matchning för den angivna körningen. Om en exakt matchning inte hittas går NuGet tillbaka tills den hittar det närmaste kompatibla systemet enligt RID-grafen.

Följande exempel är den faktiska posten för osx-x64 RID:

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

Ovanstående RID anger att osx-x64 importerar unix-x64. Så när NuGet återställer paket försöker det hitta en exakt matchning för osx-x64 i paketet. Om NuGet inte kan hitta den specifika körningen kan den till exempel återställa paket som anger unix-x64 körningskörningar.

I följande exempel visas ett något större RID-diagram som också definierats i filen runtime.json :

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

Du kan också använda RidGraph-verktyget för att enkelt visualisera RID-grafen (eller någon delmängd av grafen).

Alla RID:er mappas så småningom tillbaka till rot-RID any .

Det finns vissa överväganden om RID:er som du måste tänka på när du arbetar med dem:

  • Försök inte parsa RID:er för att hämta komponentdelar.

  • Använd RID:er som redan har definierats för plattformen.

  • RID:erna måste vara specifika, så anta inte något från det faktiska RID-värdet.

  • Skapa inte RID:er programmatiskt om det inte är absolut nödvändigt.

    Vissa appar måste beräkna RID:er programmatiskt. I så fall måste de beräknade RID:erna matcha katalogen exakt, inklusive i höljet. RID:er med olika höljen skulle orsaka problem när operativsystemet är skiftlägeskänsligt, till exempel Linux, eftersom värdet ofta används när du skapar saker som utdatasökvägar. Överväg till exempel en anpassad publiceringsguide i Visual Studio som förlitar sig på information från lösningskonfigurationshanteraren och projektegenskaperna. Om lösningskonfigurationen skickar ett ogiltigt värde, till exempel i ARM64 stället arm64för , kan det resultera i ett ogiltigt RID, till exempel win-ARM64.

Använda RID

För att kunna använda RID måste du veta vilka RID:er som finns. Den senaste och fullständiga versionen finns i PortableRuntimeIdentifierGraph.json på lagringsplatsen dotnet/sdk .

RID:er som anses vara "portabla", dvs. är inte knutna till en viss version eller os-distribution, är det rekommenderade valet. Det innebär att bärbara RID:er ska användas för att både skapa ett plattformsspecifikt program och skapa ett NuGet-paket med RID-specifika tillgångar.

Från och med .NET 8 är standardbeteendet för .NET SDK och runtime att endast överväga icke-versionsspecifika och icke-distributionsspecifika RID:er. När du återställer och skapar använder SDK :t ett mindre portabelt RID-diagram. RuntimeInformation.RuntimeIdentifierReturnerar den plattform som körningen skapades för. Vid körning hittar .NET RID-specifika tillgångar med hjälp av en känd uppsättning portabla RID:er. När du skapar ett program med RID-specifika tillgångar som kan ignoreras vid körningen avger SDK en varning: NETSDK1206.

Läsa in tillgångar för en specifik operativsystemversion eller distribution

.NET försöker inte längre ge förstklassigt stöd för att lösa beroenden som är specifika för en operativsystemversion eller distribution. Om ditt program eller paket behöver läsa in olika tillgångar baserat på operativsystemversion eller distribution bör det implementera logiken för att villkorligt läsa in tillgångar.

Om du vill få information om plattformen använder du System.OperatingSystem API:er. I Windows och macOS Environment.OSVersion returneras operativsystemets version. I Linux kan det vara kernelversionen – för att hämta information om Linux-distributionens namn och version är den rekommenderade metoden att läsa filen /etc/os-release .

.NET tillhandahåller olika tilläggspunkter för att anpassa inläsningslogik, NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver)till exempel , AssemblyLoadContext.ResolvingUnmanagedDll, AssemblyLoadContext.Resolvingoch AppDomain.AssemblyResolve. Dessa kan användas för att läsa in tillgången som motsvarar den aktuella plattformen.

Kända RID:ar

I följande lista visas en liten delmängd av de vanligaste RID:erna som används för varje operativsystem. Den senaste och fullständiga versionen finns i PortableRuntimeIdentifierGraph.json på lagringsplatsen dotnet/sdk .

Windows RID

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

Mer information finns i .NET-beroenden och krav.

Linux-RID:er

  • linux-x64 (De flesta skrivbordsdistributioner som CentOS, Debian, Fedora, Ubuntu och derivat)
  • linux-musl-x64 (Lätta distributioner med musl som Alpine Linux)
  • linux-musl-arm64 (Används för att skapa Docker-avbildningar för 64-bitars Arm v8 och minimalistiska basavbildningar)
  • linux-arm (Linux-distributioner som körs på Arm som Raspbian på Raspberry Pi Model 2+)
  • linux-arm64 (Linux-distributioner som körs på 64-bitars arm som Ubuntu Server 64-bitars på Raspberry Pi Model 3+)
  • linux-bionic-arm64 (Distributioner med Androids bionic libc, till exempel Termux)

Mer information finns i .NET-beroenden och krav.

macOS-RID:er

macOS-RID:er använder den äldre "OSX"-varumärkesanpassningen.

  • osx-x64 (Lägsta operativsystemversion är macOS 10.12 Sierra)
  • osx-arm64

Mer information finns i .NET-beroenden och krav.

iOS-RID:er

  • ios-arm64

Android-RID:er

  • android-arm64

Se även