.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-x64
eller 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:
- dotnet build
- dotnet clean
- dotnet pack
- dotnet publish
- dotnet-återställning
- dotnet-körning
- dotnet store
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
,arm
ellerarm64
.[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/runtime
. 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 runtime.json-filen, som finns på lagringsplatsen.dotnet/runtime
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älletarm64
för , kan det resultera i ett ogiltigt RID, till exempelwin-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/runtime
.
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.RuntimeIdentifier Returnerar 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/runtime
.
Windows RID
win-x64
win-x86
win-arm64
Mer information finns i Installera .NET i Windows.
Linux-RID:er
linux-x64
(De flesta skrivbordsdistributioner som CentOS Stream, 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