Dela via


Värden bestämmer RID-specifika tillgångar

När du kör ett program med RID-specifika tillgångar (Runtime Identifier) avgör värden vilka tillgångar som är relevanta för den plattform som den körs på. Detta gäller både själva programmet och den lösningslogik som används av AssemblyDependencyResolver.

Tidigare försökte värden beräkna RID vid körning och läste sedan RID-grafen för att avgöra vilka RID-specifika tillgångar som matchade eller var kompatibla med den beräknade RID. Standardbeteendet beräknar inte RID eller använder RID-grafen. I stället förlitar sig värden på en känd lista över RID:er baserat på hur själva körningen skapades.

Tidigare beteende

Tidigare var processen för att välja RID-specifika tillgångar:

  1. Läs RID-grafen från .deps.json-filen i rotramverket (Microsoft.NetCore.App).
  2. Beräkna aktuell RID vid körning och försök hitta en post för den i RID-grafen. Om det inte finns kontrollerar du om det finns ett återställnings-RID (inbyggt i värden vid kompileringstillfället).
  3. Från den post som finns i RID-grafen letar du efter tillgångar som matchar RID.
  4. Fortsätt nedåt i listan över RID:er i RID-grafposten tills en tillgångsmatchning hittas eller listan slutar.

Om RID-grafen inte hade den beräknade RID eller återställnings-RID löstes INTE RID-tillgångarna korrekt.

Nytt beteende

Som standard förlitar sig processen inte längre på RID-grafen. I stället söker den efter en känd uppsättning portabla RID:er baserat på hur värden skapades. Till exempel:

Linux

  • linux-x64
  • linux
  • unix-x64
  • Unix
  • någon

Windows

  • win-x64
  • Vinna
  • någon

macOS

  • osx-x64
  • Osx
  • unix-x64
  • Unix

För icke-bärbara versioner av värden eller körningen kan bygget också ange en icke-portabel RID som kontrolleras först.

Version introducerad

Förhandsversion 5 av .NET 8

Typ av icke-bakåtkompatibel ändring

Den här ändringen kan påverka binär kompatibilitet och är också en beteendeförändring.

Orsak till ändringen

RID-grafen var kostsam att underhålla och förstå, vilket krävde att .NET självt var distro-medvetet på ett bräckligt sätt. .NET-teamet och communityn ägnar en icke-trivial tid åt att uppdatera grafen och backportera sådana uppdateringar till tidigare versioner. Det långsiktiga målet är att sluta uppdatera RID-grafen, sluta läsa den och slutligen ta bort den. Den här icke-bakåtkompatibla ändringen är ett steg mot det målet.

Använd bärbara RID:er, linuxtill exempel , linux-musl, osxoch win. För specialiserade användningsfall kan du använda API:er som NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) eller AssemblyLoadContext.ResolvingUnmanagedDll för anpassad inläsningslogik.

Om du behöver återgå till det tidigare beteendet anger du bakåtkompatibilitetsväxlingen System.Runtime.Loader.UseRidGraph till true i runtimeconfig.json-filen. Om du anger växeln till true instrueras värden att använda det tidigare beteendet att läsa RID-grafen. Du kan också ange UseRidGraph egenskapen MSBuild till true i projektfilen. Till exempel

<PropertyGroup>
  <UseRidGraph>true</UseRidGraph>
</PropertyGroup>

Berörda API:er

Se även