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:
- Läs RID-grafen från .deps.json-filen i rotramverket (Microsoft.NetCore.App).
- 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).
- Från den post som finns i RID-grafen letar du efter tillgångar som matchar RID.
- 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.
Rekommenderad åtgärd
Använd bärbara RID:er, linux
till exempel , linux-musl
, osx
och 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>