Host określa zasoby specyficzne dla identyfikatorów RID
Podczas uruchamiania aplikacji z określonymi elementami zawartości identyfikatora środowiska uruchomieniowego (RID) host określa, jakie zasoby są istotne dla platformy, na której jest uruchomiona. Dotyczy to zarówno samej aplikacji, jak i logiki rozwiązywania używanej przez AssemblyDependencyResolverprogram .
Wcześniej host próbował obliczyć identyfikator RID w czasie wykonywania, a następnie odczytać graf RID, aby określić, które zasoby specyficzne dla identyfikatorów RID są zgodne lub były zgodne z obliczonym identyfikatorem RID. Teraz domyślne zachowanie nie oblicza identyfikatora RID ani nie używa grafu RID. Zamiast tego host opiera się na znanej liście identyfikatorów RID w oparciu o sposób tworzenia samego środowiska uruchomieniowego.
Poprzednie zachowanie
Wcześniej proces wybierania zasobów specyficznych dla identyfikatorów RID był:
- Odczytaj graf RID z pliku .deps.json struktury głównej (Microsoft.NetCore.App).
- Oblicz bieżące identyfikatory RID w czasie wykonywania i spróbuj znaleźć wpis w grafie RID. Jeśli nie istnieje, sprawdź rezerwowe identyfikatory RID (wbudowane w hosta w czasie kompilacji).
- Począwszy od wpisu znalezionego na grafie RID, poszukaj zasobów pasujących do tego identyfikatora RID.
- Kontynuuj dół listy identyfikatorów RID we wpisie grafu RID, dopóki nie zostanie znalezione dopasowanie zasobu lub lista się kończy.
Jeśli graf RID nie ma obliczonego identyfikatora RID lub rezerwowego identyfikatora RID, zasoby rid nie zostały prawidłowo rozwiązane.
Nowe zachowanie
Domyślnie proces nie opiera się już na grafie RID. Zamiast tego sprawdza znany zestaw przenośnych identyfikatorów RID w oparciu o sposób tworzenia hosta. Na przykład:
Linux
- linux-x64
- linux
- unix-x64
- Unix
- dowolny
Windows
- win-x64
- Wygrać
- dowolny
macOS
- osx-x64
- Osx
- unix-x64
- Unix
W przypadku kompilacji innych niż przenośne hostów lub środowiska uruchomieniowego kompilacja może również ustawić nieodnośny identyfikator RID, który jest sprawdzany jako pierwszy.
Wprowadzona wersja
.NET 8 (wersja zapoznawcza 5)
Typ zmiany powodującej niezgodność
Ta zmiana może mieć wpływ na zgodność binarną i jest również zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Graf RID był kosztowny do utrzymania i zrozumienia, wymagając, aby platforma .NET była świadoma dystrybucji w kruchy sposób. Zespół platformy .NET i społeczność poświęcają nietrywialny czas na aktualizowanie grafu i importowanie takich aktualizacji do poprzednich wersji. Długoterminowym celem jest zatrzymanie aktualizowania grafu RID, zatrzymywanie odczytywania go i usuwanie go w końcu. Ta zmiana powodująca niezgodność jest krokiem w kierunku tego celu.
Zalecana akcja
Użyj przenośnych identyfikatorów ZAREZERWOWANYch, na przykład linux
, , linux-musl
osx
i win
. W przypadku wyspecjalizowanych przypadków użycia można użyć interfejsów API, takich jak NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) lub AssemblyLoadContext.ResolvingUnmanagedDll dla niestandardowej logiki ładowania.
Jeśli chcesz przywrócić poprzednie zachowanie, ustaw przełącznik System.Runtime.Loader.UseRidGraph
zgodności wstecz na true
w pliku runtimeconfig.json . Ustawienie przełącznika na true
polecenie nakazuje hostowi użycie poprzedniego zachowania odczytu grafu RID. Alternatywnie możesz ustawić UseRidGraph
właściwość MSBuild na true
w pliku projektu. Na przykład
<PropertyGroup>
<UseRidGraph>true</UseRidGraph>
</PropertyGroup>