usar como .net dllimport

como - Especifique la ruta de búsqueda para DllImport en.NET



dllimport c# path (3)

Esto podría ser útil DefaultDllImportSearchPathsAttribute Class
P.ej

[assembly: DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]

También tenga en cuenta que también puede usar AddDllDirectory para que no arruine nada que ya esté allí:

[DllImport("kernel32.dll", SetLastError = true)] static extern bool AddDllDirectory(string path);

¿Hay alguna forma de especificar las rutas que se deben buscar para un ensamblaje determinado que se importa con DllImport?

[DllImport("MyDll.dll")] static extern void Func();

Esto buscará el dll en el directorio de la aplicación y en la variable de entorno PATH. Pero a veces el dll se colocará en otro lado. ¿Se puede especificar esta información en app.config o en el archivo de manifiesto para evitar la carga dinámica y la invocación dinámica?


Intente llamar a AddDllDirectory con sus rutas adicionales de DLL antes de llamar a la función importada por primera vez.

Si su versión de Windows es inferior a 8, necesitará instalar este parche , que amplía la API con la función AddDllDirectory faltante para Windows 7, 2008 R2, 2008 y Vista (sin embargo, no hay parche para XP).


Llame a SetDllDirectory con sus rutas adicionales de DLL antes de llamar a la función importada por primera vez.

Firma de P / Invoke:

[DllImport("kernel32.dll", SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);

Para establecer más de una ruta de búsqueda DLL adicional, modifique la PATH entorno PATH , por ejemplo:

static void AddEnvironmentPaths(string[] paths) { string path = Environment.GetEnvironmentVariable("PATH") ?? string.Empty; path += ";" + string.Join(";", paths); Environment.SetEnvironmentVariable("PATH", path); }

Hay más información sobre el orden de búsqueda de DLL aquí en MSDN .

Actualizado el 30/07/2013:

Versión actualizada de lo anterior utilizando Path.PathSeparator :

static void AddEnvironmentPaths(IEnumerable<string> paths) { var path = new[] { Environment.GetEnvironmentVariable("PATH") ?? string.Empty }; string newPath = string.Join(Path.PathSeparator.ToString(), path.Concat(paths)); Environment.SetEnvironmentVariable("PATH", newPath); }