Freigeben über


Durch Angeben von DllImportSearchPath.AssemblyDirectory wird nur das Assemblyverzeichnis durchsucht.

Ab Version .NET 10, wenn Sie DllImportSearchPath.AssemblyDirectory als einziges Suchflag angeben, sucht die Laufzeit ausschließlich im Assembly-Verzeichnis. Diese Änderung wirkt sich auf das Verhalten von P/Invokes und der NativeLibrary Klasse aus.

Eingeführte Version

.NET 10

Vorheriges Verhalten

DllImportSearchPath.AssemblyDirectory Als zuvor als einziges Suchflagge angegeben wurde, durchsuchte die Laufzeit zuerst das Assemblyverzeichnis. Wenn die Bibliothek nicht gefunden wurde, fiel sie auf das Standardmäßige Suchverhalten der Bibliothek des Betriebssystems zurück.

Beispielsweise würde die Laufzeit mit dem folgenden Code das Assemblyverzeichnis durchsuchen und dann auf die Suchpfade des Betriebssystems zurückfallen.

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

Neues Verhalten

Ab .NET 10 durchsucht das Laufzeitsystem nur das Assemblyverzeichnis, wenn DllImportSearchPath.AssemblyDirectory als einziges Suchflag angegeben ist. Es fällt nicht auf das Standardverhalten der Bibliothekssuche des Betriebssystems zurück.

Im vorherigen Codebeispiel wird nun nur das Assemblyverzeichnis nach example.dlldurchsucht. Wenn die Bibliothek dort nicht gefunden wird, wird ein DllNotFoundException Fehler ausgelöst.

Art der einschneidenden Änderung

Dies ist eine Verhaltensänderung.

Grund für Änderung

Das Fallbackverhalten bei der Angabe DllImportSearchPath.AssemblyDirectory verursachte Verwirrung und war mit dem Entwurf von Suchkennzeichnungen inkonsistent. Diese Änderung sorgt für Klarheit und Konsistenz im Verhalten.

Wenn ein Fallbackverhalten erforderlich ist, vermeiden Sie die Angabe eines expliziten DllImportSearchPath. Wenn keine Kennzeichnungen angegeben werden, durchsucht die Laufzeit standardmäßig das Assemblyverzeichnis und greift dann auf das Standardverhalten der Bibliothekssuche des Betriebssystems zurück.

Beispiel:

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

Betroffene APIs

Siehe auch