我的发布文件夹是:
MyApp.exe
MyManagedDLL.dll
NativeDLL.dll
MyApp的使用托管DLL与PInvoke的本地DLL调用。 我试图将其移动到另一个文件夹,子文件夹和我再次引用的托管的DLL,当我运行我的应用程序它说,它无法找到NativeDLL.dll。 如何解决呢?
我的发布文件夹是:
MyApp.exe
MyManagedDLL.dll
NativeDLL.dll
MyApp的使用托管DLL与PInvoke的本地DLL调用。 我试图将其移动到另一个文件夹,子文件夹和我再次引用的托管的DLL,当我运行我的应用程序它说,它无法找到NativeDLL.dll。 如何解决呢?
Windows有不知道它需要在DLL中的子目录看看。 它只会看在DLL中的少数地方,从包含该EXE的文件夹开始。 给它一个很难这样说,这不是很有成效。 但是你可以通过pinvoking SetDllDirectory会帮助它()。 请记住,你的用户不会关心该DLL所在。 IT部门倾向于简单的解决方案,故障排除DLL加载问题,当应用程序本身正在改变Windows的搜索路径是从来没有的乐趣。
它是否则合理的方式,以允许AnyCPU可执行以无论是在32位和64位模式下运行。 你会使用两个目录,一个与DLL的32位版本,其余与64位版本。 和PInvoke的SetDllDirectory会相应地,基于IntPtr.Size的价值。
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);