2

VB6 程序员给了我一个要求(是的,它们仍然存在)。存在使用 vb6 dll 的 vb6 应用程序,此 dll 现在使用 .net dll,而后者又使用另一个 .net dll。现在我的要求是 .net dll 应该像 vb dll 一样工作,即一旦注册了 vb6 dll,它就可以被其他应用程序使用,并且在推出时不需要包含(所以我被告知)。有没有办法放置我的 .net dll 以便其他 vb6 应用程序可以使用它。从我所见,这仅在我的 .net dll 与我的 vb6 exe 位于同一文件夹中时才有效。

我已阅读此COM 程序如何定位为 COM 互操作注册的 .NET DLL?

谢谢你

4

1 回答 1

5

COM 因其 DLL Hell 问题而臭名昭著。注册对于机器上的所有程序都是全局的。因此,替换 DLL 通常最终会破坏使用 COM 服务器的其他程序。

.NET 对此有一个对策,当您运行 Regasm.exe 来注册 [ComVisible] .NET 程序集时,它将默认假定您将程序集放在 GAC 中。这会自动购买 DLL 地狱保护。然而,使用 /codebase 选项注册程序集并不少见,尤其是在您的开发机器上以及由 IDE 完成的情况。

然而,您现在会遇到一个新问题,CLR 没有很好的机制来定位相关的 .NET 程序集。探测路径基于 COM 客户端 EXE。这就是为什么将您的依赖程序集复制到 EXE 安装目录中的原因。

这对于测试来说很好,但不是您在部署服务器时想要使用的一个好的通用解决方案。您无法准确预测什么 EXE 将使用 COM 服务器以及它的位置。弄乱别人拥有的程序的安装目录通常在政治上很困难。

使用GAC,所有问题都解决了。

于 2012-08-13T14:58:39.360 回答