我的发布文件夹是:
MyApp.exe
MyManagedDLL.dll
NativeDLL.dll
MyApp 使用通过 pinvoke 本机 dll 调用的托管 dll。我试图将它们移动到另一个子文件夹文件夹并再次引用托管 dll,当我运行我的应用程序时它说它找不到 NativeDLL.dll。如何解决?
我的发布文件夹是:
MyApp.exe
MyManagedDLL.dll
NativeDLL.dll
MyApp 使用通过 pinvoke 本机 dll 调用的托管 dll。我试图将它们移动到另一个子文件夹文件夹并再次引用托管 dll,当我运行我的应用程序时它说它找不到 NativeDLL.dll。如何解决?
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);