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);
}