Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Auparavant, dans les applications .NET à fichier unique, le répertoire de l’exécutable à fichier unique a été ajouté à la NATIVE_DLL_SEARCH_DIRECTORIES propriété au démarrage. Par conséquent, .NET a toujours interrogé le répertoire de l’application lorsque des bibliothèques non managées ont été chargées. Sur les systèmes non-Windows avec NativeAOT, le rpath a été défini par défaut sur le répertoire de l’application, afin qu’il recherche toujours les bibliothèques natives dans le répertoire de l’application.
Le répertoire d’application n’est plus ajouté dans NATIVE_DLL_SEARCH_DIRECTORIES les applications à fichier unique et le rpath paramètre a été supprimé dans NativeAOT. Dans les deux cas, DllImportSearchPath.AssemblyDirectory (inclus dans le comportement par défaut pour P/Invokes) signifie le répertoire de l’application. Si vous spécifiez cette valeur ou laissez la valeur par défaut, .NET recherche dans le répertoire de l’application. Si vous spécifiez des indicateurs sans cette valeur, .NET ne recherche plus dans le répertoire de l’application.
Version introduite
.NET 10
Comportement précédent
Auparavant, les applications à fichier unique ont toujours regardé dans le répertoire d’application lors du chargement des bibliothèques natives. Sur les systèmes d’exploitation non Windows, les applications NativeAOT ont toujours regardé dans le répertoire de l’application lors du chargement de bibliothèques natives.
Par exemple, le P/Invoke suivant a cherché dans le répertoire de l’application le fichier lib et l’a chargé à partir de là s’il existait :
[DllImport("lib")
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
static extern void Method()
Nouveau comportement
À compter de .NET 10, les applications à fichier unique recherchent uniquement dans le répertoire de l’application si les chemins de recherche d’une charge de bibliothèque native indiquent notamment le répertoire d’assembly.
// Look in System32 on Windows.
// Search the OS on non-Windows.
[DllImport("lib")
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
static extern void Method()
// Look next to the single-file app because assembly directory
// means application directory for single-file apps.
[DllImport("lib")
[DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)]
static extern void Method()
// Look next to the single-file app (because assembly
// directory is searched by default), then default OS search.
[DllImport("lib")
static extern void Method()
Type de changement cassant
Il s’agit d’un changement comportemental.
Raison de la modification
Le comportement existant (toujours regarder dans le répertoire de l’application même si les chemins de recherche l’excluent) a provoqué une confusion. Il est également incohérent avec la façon dont les indicateurs de recherche sont gérés dans des applications .NET standard (non-single-file, non nativeAOT).
Action recommandée
Si le répertoire application/assembly est souhaité pour une charge de bibliothèque P/Invoke ou native et n’a pas été spécifié précédemment, spécifiez DllImportSearchPath.AssemblyDirectory.
Si le RPATH paramètre est souhaité dans NativeAOT, ajoutez explicitement les arguments de l’éditeur de liens correspondants à votre projet.
API affectées
- P/Invokes
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad