Partager via


Spécifier DllImportSearchPath.AssemblyDirectory ne recherche que le répertoire de l’assembly

À compter de .NET 10, si vous spécifiez DllImportSearchPath.AssemblyDirectory comme seul indicateur de recherche, le runtime effectue des recherches exclusivement dans le répertoire d’assembly. Cette modification affecte le comportement des P/Invokes et de la NativeLibrary classe.

Version introduite

.NET 10 Preview 5

Comportement précédent

Quand DllImportSearchPath.AssemblyDirectory a été spécifié comme seul indicateur de recherche, le runtime a d’abord recherché le répertoire de l'assembly. Si la bibliothèque n’a pas été trouvée, elle est renvoyée au comportement de recherche de bibliothèque par défaut du système d’exploitation.

Exemple:

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

Dans ce cas, le runtime recherche le répertoire d’assembly, puis revient aux chemins de recherche du système d’exploitation.

Nouveau comportement

Lorsqu’il DllImportSearchPath.AssemblyDirectory est spécifié comme seul indicateur de recherche, le runtime recherche uniquement dans le répertoire d’assembly. Elle ne revient pas au comportement de recherche de bibliothèque par défaut du système d’exploitation.

L’exemple de code précédent ne recherche désormais que le répertoire d’assembly pour example.dll. Si la bibliothèque est introuvable à cet endroit, une DllNotFoundException sera lancée.

Type de changement cassant

Il s’agit d’un changement comportemental.

Raison de la modification

Le comportement par défaut lors de la spécification de DllImportSearchPath.AssemblyDirectory a causé de la confusion et était incohérent avec la conception des indicateurs de recherche. Cette modification garantit la clarté et la cohérence du comportement.

Si un comportement de secours est requis, évitez de spécifier explicitement DllImportSearchPath. Par défaut, lorsqu’aucun indicateur n’est spécifié, le runtime recherche le répertoire d’assembly, puis revient au comportement de recherche de bibliothèque par défaut du système d’exploitation.

Exemple:

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

API affectées