Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Zalecana akcja
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
- Wywołania P/Invoke przy użyciu polecenia DefaultDllImportSearchPathsAttribute
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad