.NET RID-catalogus

RID is een afkorting voor runtime-id. RID-waarden worden gebruikt om doelplatformen te identificeren waarop de toepassing wordt uitgevoerd. Ze worden gebruikt door .NET-pakketten om platformspecifieke assets in NuGet-pakketten weer te geven. De volgende waarden zijn voorbeelden van RID's: linux-x64, win-x64of osx-x64. Voor de pakketten met systeemeigen afhankelijkheden wijst de RID aan op welke platforms het pakket kan worden hersteld.

Eén RID kan worden ingesteld in het <RuntimeIdentifier> element van het projectbestand. Meerdere RID's kunnen worden gedefinieerd als een door puntkomma's gescheiden lijst in het element van <RuntimeIdentifiers> het projectbestand. Ze worden ook gebruikt via de --runtime optie met de volgende .NET CLI-opdrachten:

RID's die concrete besturingssystemen vertegenwoordigen, volgen meestal dit patroon: waarbij: [os].[version]-[architecture]-[additional qualifiers]

  • [os] is het besturingssysteem/platformsysteem moniker. Bijvoorbeeld ubuntu.

  • [version] is de versie van het besturingssysteem in de vorm van een door punt gescheiden (.) versienummer. Bijvoorbeeld 15.10.

    De versie mag geen marketingversie zijn, omdat marketingversies vaak meerdere discrete versies van het besturingssysteem vertegenwoordigen met verschillende platform-API-oppervlakten.

  • [architecture] is de processorarchitectuur. Bijvoorbeeld: x86, x64, , armof arm64.

  • [additional qualifiers] verschillende platformen verder onderscheiden. Voorbeeld: aot.

RID-grafiek

De RID-grafiek of runtime-terugvalgrafiek is een lijst met RID's die compatibel zijn met elkaar.

Deze RID's worden gedefinieerd in PortableRuntimeIdentifierGraph.json in de dotnet/sdk opslagplaats. In dit bestand ziet u dat alle RID's, met uitzondering van de basis, een "#import" instructie bevatten. Deze instructies geven compatibele RID's aan.

Vóór .NET 8 werden versiespecifieke en distributiespecifieke RID's regelmatig toegevoegd aan het pakket Microsoft.NETCore.Platforms en de RID-grafiek in het runtime.json-bestand, dat zich in de dotnet/runtime opslagplaats bevindt. Deze grafiek wordt niet meer bijgewerkt en bestaat als een optie voor compatibiliteit met eerdere versies. Ontwikkelaars moeten RID's gebruiken die niet-versiespecifiek en niet-distributiespecifiek zijn.

Wanneer NuGet pakketten herstelt, wordt geprobeerd een exacte overeenkomst te vinden voor de opgegeven runtime. Als er geen exacte overeenkomst wordt gevonden, loopt NuGet terug naar de grafiek totdat het dichtstbijzijnde compatibele systeem wordt gevonden volgens de RID-grafiek.

Het volgende voorbeeld is de werkelijke vermelding voor de osx-x64 RID:

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

De bovenstaande RID geeft aan dat osx-x64 importeren unix-x64. Dus wanneer NuGet pakketten herstelt, wordt geprobeerd om een exacte overeenkomst voor osx-x64 in het pakket te vinden. Als NuGet de specifieke runtime niet kan vinden, kan deze pakketten herstellen die bijvoorbeeld runtimes opgeven unix-x64 .

In het volgende voorbeeld ziet u een iets grotere RID-grafiek die ook is gedefinieerd in het runtime.json-bestand :

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

U kunt ook het hulpprogramma RidGraph gebruiken om eenvoudig de RID-grafiek (of een subset van de grafiek) te visualiseren.

Alle RID's worden uiteindelijk weer toegewezen aan de hoofd-RID any .

Er zijn enkele overwegingen met betrekking tot RID's waarmee u rekening moet houden bij het werken met deze id's:

  • Probeer geen RID's te parseren om onderdeelonderdelen op te halen.

  • Gebruik RID's die al zijn gedefinieerd voor het platform.

  • De RID's moeten specifiek zijn, dus neem niets uit van de werkelijke RID-waarde.

  • Bouw geen RID's programmatisch, tenzij dit absoluut noodzakelijk is.

    Sommige apps moeten programmatisch RID's berekenen. Zo ja, dan moeten de berekende RID's exact overeenkomen met de catalogus, inclusief in behuizing. RID's met verschillende behuizingen veroorzaken problemen wanneer het besturingssysteem hoofdlettergevoelig is, bijvoorbeeld Linux, omdat de waarde vaak wordt gebruikt bij het maken van zaken zoals uitvoerpaden. Denk bijvoorbeeld aan een aangepaste publicatiewizard in Visual Studio die afhankelijk is van informatie van de configuration manager van de oplossing en projecteigenschappen. Als de oplossingsconfiguratie bijvoorbeeld een ongeldige waarde doorgeeft, ARM64arm64kan dit resulteren in een ongeldige RID, zoals win-ARM64.

RID's gebruiken

Als u RID's wilt kunnen gebruiken, moet u weten welke RID's bestaan. Zie de PortableRuntimeIdentifierGraph.json in de dotnet/sdk opslagplaats voor de meest recente en volledige versie.

RID's die worden beschouwd als 'draagbaar', dat wil gezegd, zijn niet gekoppeld aan een specifieke versie of distributie van het besturingssysteem, zijn de aanbevolen keuze. Dit betekent dat draagbare RID's moeten worden gebruikt voor het bouwen van een platformspecifieke toepassing en het maken van een NuGet-pakket met RID-specifieke assets.

Vanaf .NET 8 is het standaardgedrag van de .NET SDK en runtime alleen van toepassing op niet-versiespecifieke en niet-distributiespecifieke RID's. Bij het herstellen en bouwen gebruikt de SDK een kleinere draagbare RID-grafiek. Het RuntimeInformation.RuntimeIdentifierretourneert het platform waarvoor de runtime is gebouwd. Tijdens runtime vindt .NET RID-specifieke assets met behulp van een bekende set draagbare RID's. Bij het bouwen van een toepassing met RID-specifieke assets die tijdens runtime kunnen worden genegeerd, verzendt de SDK een waarschuwing: NETSDK1206.

Assets laden voor een specifieke versie of distributie van het besturingssysteem

.NET probeert geen eersteklas ondersteuning meer te bieden voor het oplossen van afhankelijkheden die specifiek zijn voor een versie of distributie van het besturingssysteem. Als uw toepassing of pakket verschillende assets moet laden op basis van de versie of distributie van het besturingssysteem, moet deze de logica implementeren om assets voorwaardelijk te laden.

Gebruik System.OperatingSystem API's om informatie over het platform op te halen. In Windows en macOS Environment.OSVersion wordt de versie van het besturingssysteem geretourneerd. In Linux kan het de kernelversie zijn: om de naam van de Linux-distributie en versiegegevens op te halen, is de aanbevolen methode om het bestand /etc/os-release te lezen.

.NET biedt verschillende uitbreidingspunten voor het aanpassen van laadlogica, bijvoorbeeld NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver), AssemblyLoadContext.ResolvingAssemblyLoadContext.ResolvingUnmanagedDllen AppDomain.AssemblyResolve. Deze kunnen worden gebruikt om de asset te laden die overeenkomt met het huidige platform.

Bekende RID's

In de volgende lijst ziet u een kleine subset van de meest voorkomende RID's die voor elk besturingssysteem worden gebruikt. Zie de PortableRuntimeIdentifierGraph.json in de dotnet/sdk opslagplaats voor de meest recente en volledige versie.

Windows-RID's

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

Zie .NET-afhankelijkheden en -vereisten voor meer informatie.

Linux-RID's

  • linux-x64 (De meeste bureaubladdistributies zoals CentOS, Debian, Fedora, Ubuntu en derivaten)
  • linux-musl-x64 (Lichtgewicht distributies met musl zoals Alpine Linux)
  • linux-musl-arm64 (Wordt gebruikt voor het bouwen van Docker-installatiekopieën voor 64-bits Arm v8 en minimalistische basisinstallatiekopieën)
  • linux-arm (Linux-distributies die worden uitgevoerd op Arm, zoals Raspbian op Raspberry Pi Model 2+)
  • linux-arm64 (Linux-distributies die worden uitgevoerd op 64-bits Arm zoals Ubuntu Server 64-bits op Raspberry Pi Model 3+)
  • linux-bionic-arm64 (Distributies met behulp van de bionic libc van Android, bijvoorbeeld Termux)

Zie .NET-afhankelijkheden en -vereisten voor meer informatie.

macOS-RID's

macOS-RID's maken gebruik van de oudere 'OSX'-huisstijl.

  • osx-x64 (Minimale versie van het besturingssysteem is macOS 10.12 Sierra)
  • osx-arm64

Zie .NET-afhankelijkheden en -vereisten voor meer informatie.

iOS-RID's

  • ios-arm64

Android-RID's

  • android-arm64

Zie ook