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

Comportement précédent

Auparavant, lorsqu’il DllImportSearchPath.AssemblyDirectory était spécifié comme seul indicateur de recherche, le runtime a d’abord recherché le répertoire d’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.

Par exemple, avec le code suivant, le runtime recherche le répertoire d’assembly, puis revient aux chemins de recherche du système d’exploitation.

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

Nouveau comportement

À compter de .NET 10, 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 recherche désormais uniquement le répertoire d’assembly pour example.dll. Si la bibliothèque est introuvable, une exception DllNotFoundException est levé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

Voir aussi