Dot-Net

在 .NET 中指定 DllImport 的搜尋路徑

  • May 19, 2010

有沒有辦法為使用 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);
}

引用自:https://stackoverflow.com/questions/2864673