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

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

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


提前谢谢

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


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

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

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

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

实际上,我不想修改任何环境变量。是否有任何方法可以从SetDllDirectory中指定的路径加载C#dll和C#dll?这是最简单的方法,您根本不必使用SetDllDirectory。当您通过.NET互操作(DllImport)加载dll时,将不使用通过SetDllDirectory函数设置的路径,您必须使用LoadLibrary(kernel32.dll)获取函数指针,然后使用封送处理从该dll获取函数的委托。这可能会有帮助:托梅克,我很确定SetDllDirectory会影响PInvoke DLL的加载位置。