Dela via


Värden bestämmer RID-specifika resurser

När du kör ett program med RID-specifika tillgångar (Runtime Identifier) avgör värdprogrammet vilka tillgångar som är relevanta för den plattform det 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:n vid körningstid och läste sedan av RID-grafen för att avgöra vilka RID-specifika resurser som matchade eller var kompatibla med den beräknade RID:n. Standardbeteendet beräknar inte RID eller använder RID-grafen. I stället förlitar sig värdprogrammet på en känd lista över RID:er baserat på hur körmiljön är byggd.

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, kontrollera om det finns ett reserv-RID (inbyggt i värd vid kompileringstillfället).
  3. Utgå från posten som finns i RID-grafen och leta efter tillgångar som matchar den 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 reserv-RID löstes RID-tillgångarna inte 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 (Windows för 64-bitars arkitektur)
  • vinna
  • någon

macOS

  • osx-x64
  • OS X
  • unix-x64
  • Unix

För icke-bärbara versioner av värdmiljön eller körningsmiljön kan bygget också ange en icke-bärbar RID som kontrolleras först.

Version lanserad

Förhandsversion 5 av .NET 8

Typ av brytande ändring

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

Orsak till ändring

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 brytande ä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 dinruntimeconfig.json-fil . Om du anger switchen till true instrueras värden att använda tidigare metoder för 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