Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
- 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, kontrollera om det finns ett reserv-RID (inbyggt i värd vid kompileringstillfället).
- Utgå från posten som finns i RID-grafen och leta efter tillgångar som matchar den 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 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.
Rekommenderad åtgärd
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>