所以我有三个部分:
bridgeEntry
的本机C函数,并调用Lib中的方法。bridgeEntry
。现在我把它们全部放到一个目录中,正如预期的那样,当我运行NativeExe时会执行Lib的代码。
但是,如果我重新安排目录结构如下:
├───exe
│ NativeExe.exe
│
└───libs
BridgeLib.dll
Lib.dll
事情有点不同。显然,NativeExe.exe
文件夹中的exe
运行失败,因为它找不到BridgeLib.dll
。但是,可以通过转到libs
文件夹并运行..\exe\NativeExe.exe
来解决这个问题。现在,应用程序加载BridgeLib.dll
并跳转到bridgeEntry
。但是现在CLR与FileNotFoundException
崩溃了,因为它在可执行文件夹(Lib.dll
)中找不到exe
而在桥库的文件夹libs
中找不到。
这只是一个过于简化的示例,我无法更改目录结构。但我怎么能解决这个问题?
答案 0 :(得分:2)
您的C ++ / CLI库可以处理AppDomain.AssemblyResolve以正确指定C#程序集的位置。 CLR在运行时无法找到程序集时会触发此事件,并为您提供自行加载程序集的机会。