【发布时间】:2016-08-20 15:58:41
【问题描述】:
我正在尝试将 .Net DLL(称为 B.dll)引用到 C++ MFC 项目中,它基本上是 .Net 第三方的包装器(称为 C.dll)。我确实为 B.dll 创建了 tlb 文件,并且能够在 MFC 应用程序中实例化和调用它。
目前所有依赖项,B.tlb、B.dll 和 C.dll,都需要在 bin 中 MFC 应用程序的文件夹。我想要并且正在努力做的是将这三个文件放在 MFC 执行文件夹的子文件夹中。
我尝试将 B.dll 配置文件的“privatePath”设置为子文件夹,但据我了解,需要设置的不是 B.dll“privatepath”,而是 MFC 应用程序(显然没有据我所知,没有,因为它不是 .Net 应用程序)
感谢任何帮助。
【问题讨论】:
-
在这种情况下,您肯定是在最大化 DLL Hell,这没有什么意义。 CLR 在与 somename.exe 相同的目录中查找 somename.exe.config 文件。所以你可以添加一个
<probing>元素来帮助它找到C.dll 文件。 B.dll 只能通过使用注册程序集所需的 Regasm.exe 命令中的 /codebase 选项或通过为 mfc 应用程序提供带有<clrclass>元素的清单来找到。在用户机器上使用 GAC 来实现 COM 依赖绝不是一个坏主意。 -
为什么这个场景被认为是DLL地狱?你能解释一下吗?因为我无法在不制作 .Net dll 包装器并将其注册为 COM 组件的情况下这样做。