我的发布文件夹是:
MyApp.exe
MyManagedDLL.dll
NativeDLL.dll
MyApp 使用托管 dll,它通过 pinvoke 调用本机 dll。
我尝试将它们移动到另一个子文件夹,并再次引用托管 dll,当我运行我的应用程序时,它说找不到 NativeDLL.dll。如何解决这个问题?
Windows 不知道它需要在子目录中查找 DLL。它只会在选定的几个位置查找 DLL,从包含 EXE 的文件夹开始。像这样给它一个艰难的时期它不是很有成效。但是您可以通过调用 SetDllDirectory() 来帮助它。请记住,您的用户不会关心 DLL 所在的位置。 IT 部门倾向于采用简单的解决方案,当应用程序本身改变 Windows 搜索路径时解决 DLL 加载问题从来都不是一件有趣的事情。
否则,这是允许 AnyCPU 可执行文件在 32 位和 64 位模式下运行的合理方法。你会用two目录,一个包含 32 位版本的 DLL,另一个包含 64 位版本。并根据 IntPtr.Size 的值相应地调用 SetDllDirectory。
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)