从c#中SetdllDirectory中指定的路径加载dll

时间:2012-07-10 10:04:50

标签: c# c windows winapi

我是dotnet的新手。我有一个dotnet dll,使用c加载DllImport dll。我想将所有dll放在一个与应用程序位置不同的文件夹中。我不想修改环境变量。所以我使用setdlldirectory API并通过Assembly.Loadfrom(..)加载我的c#程序集。我通过验证SetdllDirectory的值来检查GetDllDirectory(..)是否正常工作。但它既不从该文件夹加载C#dll也不加载c dll。我可以通过在C#中指定路径来加载Assembly.Loadfrom dll。但是无法加载c dll。

提前致谢!!

2 个答案:

答案 0 :(得分:14)

我建议使用以下代码在运行时将目录路径添加到PATH env变量:

var dllDirectory = @"C:/some/path";
Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + ";" + dllDirectory);

这样,更改只影响正在运行的进程,并在退出时被丢弃。

答案 1 :(得分:0)

查看LoadFrom的文档,您会发现它说:如果assemblyFile存在本机映像,则不会使用它。无法将程序集作为域中性加载。

我相信你需要将DLL目录添加到EXE的路径中。