2

我的发布文件夹是:

MyApp.exe
MyManagedDLL.dll
NativeDLL.dll

MyApp 使用通过 pinvoke 本机 dll 调用的托管 dll。我试图将它们移动到另一个子文件夹文件夹并再次引用托管 dll,当我运行我的应用程序时它说它找不到 NativeDLL.dll。如何解决?

4

1 回答 1

3

Windows 不知道它需要在子目录中查找 DLL。它只会在选定的几个位置查找 DLL,从包含 EXE 的文件夹开始。给它一个艰难的时期,它不是很有成效。但是您可以通过调用 SetDllDirectory() 来帮助它。请记住,您的用户不会关心 DLL 的位置。IT 部门倾向于使用简单的解决方案,当应用程序本身正在改变 Windows 搜索路径时,解决 DLL 加载问题从来都不是一件有趣的事情。

否则,允许 AnyCPU 可执行文件在 32 位和 64 位模式下运行是一种合理的方法。您将使用两个目录,一个带有 32 位版本的 DLL,另一个带有 64 位版本。并根据 IntPtr.Size 的值相应地调用 SetDllDirectory。

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);
于 2012-04-06T14:49:32.290 回答