Delen via


Host bepaalt rid-specifieke assets

Bij het uitvoeren van een toepassing met specifieke RID-assets (Runtime Identifier), bepaalt de host welke assets relevant zijn voor het platform waarop deze wordt uitgevoerd. Dit geldt zowel voor de toepassing zelf als voor de oplossingslogica die wordt gebruikt door AssemblyDependencyResolver.

Voorheen probeerde de host de RID tijdens runtime te berekenen en vervolgens de RID-grafiek te lezen om te bepalen welke RID-specifieke assets overeenkomen of compatibel waren met de berekende RID. Het standaardgedrag berekent nu niet de RID of gebruikt de RID-grafiek. In plaats daarvan is de host afhankelijk van een bekende lijst met RID's op basis van hoe de runtime zelf is gebouwd.

Vorig gedrag

Voorheen was het proces voor het selecteren van RID-specifieke assets:

  1. Lees de RID-grafiek uit het .deps.json-bestand van het hoofdframework (Microsoft.NetCore.App).
  2. Bereken de huidige RID tijdens runtime en probeer er een vermelding voor te vinden in de RID-grafiek. Als deze niet bestaat, controleert u op een terugval-RID (ingebouwd in de host tijdens het compileren).
  3. Zoek vanaf de vermelding in de RID-grafiek naar assets die overeenkomen met die RID.
  4. Ga omlaag in de lijst met RID's in de RID-grafiekvermelding totdat een assetovereenkomst is gevonden of de lijst eindigt.

Als de RID-grafiek niet beschikt over de berekende RID of de terugval-RID, zijn RID-assets niet correct omgezet.

Nieuw gedrag

Het proces is standaard niet meer afhankelijk van de RID-grafiek. In plaats daarvan wordt gecontroleerd op een bekende set draagbare RID's op basis van hoe de host is gebouwd. Voorbeeld:

Linux

  • linux-x64
  • linux
  • unix-x64
  • Unix
  • willekeurige

Windows

  • win-x64
  • Winnen
  • willekeurige

macOS

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

Voor niet-draagbare builds van de host of runtime kan de build ook een niet-draagbare RID instellen die eerst wordt gecontroleerd.

Versie geïntroduceerd

.NET 8 Preview 5

Type wijziging die fouten veroorzaken

Deze wijziging kan van invloed zijn op binaire compatibiliteit en is ook een gedragswijziging.

Reden voor wijziging

De RID-grafiek was kostbaar om te onderhouden en te begrijpen, waardoor .NET zelf op een kwetsbare manier op een kwetsbare manier moet worden distro-aware. Het .NET-team en de community besteden een niet-triviale hoeveelheid tijd aan het bijwerken van de grafiek en het backporteren van dergelijke updates naar eerdere releases. Het langetermijndoel is het bijwerken van de RID-grafiek te stoppen, te stoppen met lezen en uiteindelijk te verwijderen. Deze belangrijke wijziging is een stap naar dat doel.

Gebruik draagbare RID's, bijvoorbeeld linux, linux-musl, osxen win. Voor gespecialiseerde use cases kunt u API's gebruiken, zoals NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) of AssemblyLoadContext.ResolvingUnmanagedDll voor aangepaste laadlogica.

Als u wilt terugkeren naar het vorige gedrag, stelt u de achterwaartse compatibiliteitsswitch trueSystem.Runtime.Loader.UseRidGraph in op het runtimeconfig.json-bestand. Als u de switch instelt om de host opdracht te true geven om het vorige gedrag van het lezen van de RID-grafiek te gebruiken. U kunt ook de UseRidGraph eigenschap true MSBuild instellen op in uw projectbestand. Bijvoorbeeld

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

Betrokken API's

Zie ook