2

所以我有三个部分:

  • Lib:AC# 库,为 AnyCPU 编译。
  • BridgeLib:一个 C++/CLI 库,为 x86 编译。它导出一个本地 C 函数bridgeEntry,并调用 Lib 中的方法。
  • NativeExe:一个本机 C++ Win32 应用程序,只需加载 BridgeLib.dll 并执行bridgeEntry.

现在我将它们全部放在一个目录中,正如预期的那样,当我运行 NativeExe 时,会执行来自 Lib 的代码。

但是,如果我像这样重新排列目录结构:

├───exe
│       NativeExe.exe
│
└───libs
        BridgeLib.dll
        Lib.dll

事情有点不同。显然NativeExe.exeexe文件夹中运行失败,因为它找不到BridgeLib.dll. 但这可以通过转到libs文件夹并运行来解决..\exe\NativeExe.exe。现在应用程序加载BridgeLib.dll并跳转到bridgeEntry. 但是现在 CLR 崩溃了,因为它在可执行文件的文件夹 ( ) 中而不是在桥库的文件夹中FileNotFoundException寻找。Lib.dllexelibs

这只是一个过于简化的示例,我无法更改目录结构。但是我还能怎么解决这个问题呢?

4

1 回答 1

2

您的 C++/CLI 库可以处理AppDomain.AssemblyResolve以正确指定 C# 程序集的位置。当 CLR 在运行时找不到程序集时会触发此事件,并让您有机会自己加载程序集。

于 2013-04-19T16:54:06.453 回答