Dot-Net
在 .NET 中指定 DllImport 的搜尋路徑
有沒有辦法為使用 DllImport 導入的給定程序集指定要搜尋的路徑?
[DllImport("MyDll.dll")] static extern void Func();這將在應用程序目錄和 PATH 環境變數中搜尋 dll。但有時 dll 會放在其他地方。是否可以在 app.config 或 manifest 文件中指定此資訊以避免動態載入和動態呼叫?
在您第一次呼叫
SetDllDirectory導入的函式之前,使用您的附加 DLL 路徑呼叫。P/Invoke 簽名:
[DllImport("kernel32.dll", SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);要設置多個額外的 DLL 搜尋路徑,請修改
PATH環境變數,例如:static void AddEnvironmentPaths(string[] paths) { string path = Environment.GetEnvironmentVariable("PATH") ?? string.Empty; path += ";" + string.Join(";", paths); Environment.SetEnvironmentVariable("PATH", path); }在 MSDN 上有更多關於 DLL 搜尋順序的資訊。
2013/07/30更新:
以上使用的更新版本
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); }