Hostitel určuje prostředky specifické pro identifikátory RID.

Při spouštění aplikace s konkrétními prostředky identifikátoru runtime (RID) určuje hostitel, jaké prostředky jsou relevantní pro platformu, na které běží. To platí pro samotnou aplikaci i logiku řešení, kterou AssemblyDependencyResolverpoužívá .

Hostitel se dříve pokusil vypočítat identifikátor RID za běhu a pak přečíst graf identifikátorů RID, abyste zjistili, které prostředky specifické pro identifikátory RID odpovídaly nebo byly kompatibilní s vypočítaným identifikátorem RID. Výchozí chování teď nevypočítá identifikátor RID ani nepoužívá graf identifikátorů RID. Místo toho hostitel spoléhá na známý seznam identifikátorů RID na základě toho, jak byl modul runtime vytvořen.

Předchozí chování

Dříve byl proces výběru prostředků specifických pro identifikátory RID následující:

  1. Přečtěte si graf RID ze souboru .deps.json kořenové architektury (Microsoft.NetCore.App).
  2. Vypočítá aktuální identifikátor RID za běhu a zkuste pro něj najít položku v grafu IDENTIFIKÁTORŮ RID. Pokud neexistuje, zkontrolujte záložní identifikátor RID (integrovaný do hostitele v době kompilace).
  3. Počínaje položkou nalezenou v grafu identifikátorů RID vyhledejte prostředky odpovídající danému identifikátoru RID.
  4. Pokračujte v seznamu identifikátorů RID v položce grafu IDENTIFIKÁTORů RID, dokud se nenajde shoda prostředku nebo seznam skončí.

Pokud graf identifikátorů RID nemá vypočítané identifikátory RID nebo náhradní identifikátor RID, prostředky identifikátorů RID se správně nepřeložily.

Nové chování

Ve výchozím nastavení už proces nespolehává na grafu IDENTIFIKÁTORŮ RID. Místo toho kontroluje známou sadu přenosných identifikátorů RID na základě toho, jak byl hostitel vytvořen. Příklad:

Linux

  • linux-x64
  • Linux
  • unix-x64
  • Unix
  • jakékoliv

Windows

  • win-x64
  • Vyhrát
  • jakékoliv

macOS

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

V případě nepřenosných sestavení hostitele nebo modulu runtime může sestavení také nastavit nepřenosné identifikátory RID, které se kontrolují jako první.

Zavedená verze

.NET 8 Preview 5

Typ zásadní změny

Tato změna může ovlivnit binární kompatibilitua je to také behaviorální změna.

Důvod změny

Graf identifikátorů RID byl nákladný na údržbu a pochopení, což vyžadovalo, aby rozhraní .NET samo o sobě rozdávala křehkým způsobem. Tým .NET a komunita tráví ne triviální dobu aktualizací grafu a backportováním těchto aktualizací do předchozích verzí. Dlouhodobým cílem je zastavit aktualizaci grafu RID, přestat ho číst a nakonec ho odebrat. Tato zásadní změna je krokem k tomuto cíli.

Použijte přenosné identifikátory RID, linuxnapříklad , linux-musl, osx, a win. Pro specializované případy použití můžete použít rozhraní API, jako NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) je nebo AssemblyLoadContext.ResolvingUnmanagedDll pro vlastní logiku načítání.

Pokud se potřebujete vrátit k předchozímu chování, nastavte přepínač System.Runtime.Loader.UseRidGraph zpětné kompatibility do true souboru runtimeconfig.json . Nastavením přepínače true dá hostiteli pokyn, aby použil předchozí chování při čtení grafu identifikátorů RID. Alternativně můžete vlastnost MSBuild nastavit UseRidGraph v true souboru projektu. Například

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

Ovlivněná rozhraní API

Viz také