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í:
- Přečtěte si graf RID ze souboru .deps.json kořenové architektury (Microsoft.NetCore.App).
- 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).
- Počínaje položkou nalezenou v grafu identifikátorů RID vyhledejte prostředky odpovídající danému identifikátoru RID.
- 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í kompatibilitu a 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.
Doporučená akce
Použijte přenosné identifikátory RID, linux
napří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>