Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A partir de .NET 10, si especifica DllImportSearchPath.AssemblyDirectory como la única marca de búsqueda, el entorno de ejecución busca exclusivamente en el directorio del ensamblado. Este cambio afecta al comportamiento de P/Invokes y la NativeLibrary clase .
Versión introducida
.NET 10
Comportamiento anterior
Anteriormente, cuando DllImportSearchPath.AssemblyDirectory se especificó como el único indicador de búsqueda, el tiempo de ejecución buscaba primero en el directorio del ensamblado. Si no se encontró la biblioteca, se revierte al comportamiento de búsqueda de biblioteca predeterminado del sistema operativo.
Por ejemplo, con el código siguiente, el entorno de ejecución buscaría en el directorio del ensamblado y, a continuación, revertiría a las rutas de búsqueda del sistema operativo.
[DllImport("example.dll", DllImportSearchPath = DllImportSearchPath.AssemblyDirectory)]
public static extern void ExampleMethod();
Nuevo comportamiento
A partir de .NET 10, cuando DllImportSearchPath.AssemblyDirectory se especifica como la única marca de búsqueda, el entorno de ejecución solo busca en el directorio de ensamblados. No recurre al comportamiento predeterminado de búsqueda de bibliotecas del sistema operativo.
El ejemplo de código anterior ahora solo busca en el directorio del ensamblado example.dll. Si no se encuentra allí la biblioteca, se produce una DllNotFoundException excepción .
Tipo de cambio disruptivo
Se trata de un cambio de comportamiento .
Motivo del cambio
El comportamiento de respaldo al especificar DllImportSearchPath.AssemblyDirectory causó confusión y fue incoherente con el diseño de los indicadores de búsqueda. Este cambio garantiza la claridad y la coherencia en el comportamiento.
Acción recomendada
Si se requiere el comportamiento de reserva, evite especificar un valor explícito DllImportSearchPath. De forma predeterminada, cuando no se especifican indicadores, el runtime busca en el directorio del ensamblado y luego recurre al comportamiento de búsqueda de la biblioteca por defecto del sistema operativo.
Ejemplo:
[DllImport("example.dll")]
public static extern void ExampleMethod();
Las APIs afectadas
- P/Invokes usando DefaultDllImportSearchPathsAttribute
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad