Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Empfohlene Aktion
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
- P/Invokes mit DefaultDllImportSearchPathsAttribute
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad