Udostępnij za pośrednictwem


Ustawienie DllImportSearchPath.AssemblyDirectory wyszukuje tylko katalog zestawu

Począwszy od platformy .NET 10, jeśli zostanie określona DllImportSearchPath.AssemblyDirectory jako jedyna flaga wyszukiwania, środowisko uruchomieniowe wyszukuje wyłącznie w katalogu zestawów. Ta zmiana wpływa na zachowanie operacji P/Invoke i NativeLibrary klasy.

Wersja wprowadzona

.NET 10 (wersja zapoznawcza 5)

Poprzednie zachowanie

Gdy DllImportSearchPath.AssemblyDirectory określono jako jedyną flagę wyszukiwania, środowisko uruchomieniowe przeszukało najpierw katalog zestawów. Jeśli biblioteka nie została znaleziona, wróciła do domyślnego zachowania wyszukiwania biblioteki systemu operacyjnego.

Na przykład przy użyciu następującego kodu środowisko uruchomieniowe przeszuka katalog zestawów, a następnie wróci do ścieżek wyszukiwania systemu operacyjnego.

[DllImport("example.dll", DllImportSearchPath = DllImportSearchPath.AssemblyDirectory)]
public static extern void ExampleMethod();

Nowe zachowanie

Jeśli DllImportSearchPath.AssemblyDirectory jest określona jako jedyna flaga wyszukiwania, środowisko uruchomieniowe wyszukuje tylko w katalogu zestawów. Nie wraca do domyślnego sposobu wyszukiwania bibliotek systemu operacyjnego.

Poprzedni przykład kodu przeszukuje teraz tylko katalog zestawów dla example.dll. Jeśli biblioteka nie zostanie tam znaleziona, zgłoszony zostanie wyjątek typu DllNotFoundException.

Typ zmiany przełamującej

Jest to zmiana zachowania.

Przyczyna zmiany

Zachowanie awaryjne przy określaniu DllImportSearchPath.AssemblyDirectory spowodowało zamieszanie i było niespójne z logiką flag wyszukiwania. Ta zmiana zapewnia przejrzystość i spójność zachowania.

Jeśli wymagane jest zachowanie rezerwowe, należy unikać jawnego określania elementu DllImportSearchPath. Domyślnie, gdy nie określono żadnych flag, środowisko uruchomieniowe wyszukuje katalog zestawów, a następnie wraca do domyślnego zachowania wyszukiwania biblioteki systemu operacyjnego.

Przykład:

[DllImport("example.dll")]
public static extern void ExampleMethod();

Interfejsy API, których dotyczy problem

Zobacz także