一位客户想要使用我们来自 VB6 的 .NET DLL。它们旨在支持反向互操作,并且一切正常……除了:两个不同的目录中有两个独立的 VB6 程序。似乎有必要执行以下操作之一:
- 将 .NET DLL 复制到两个目录中,或者
- 在 GAC 中安装 .NET DLL
这是客户的观察,也得到了RegAsm 文档的支持:
使用 Regasm.exe 注册程序集后,您可以将其安装在全局程序集缓存中,以便可以从任何 COM 客户端激活它。如果程序集仅由单个应用程序激活,您可以将它放在该应用程序的目录中。
在这一点上我很困惑。
第一点混淆:
据我了解,COM 运行时使用 Prog ID / Class ID 定位 DLL。当我在注册表中查看 Class ID 条目时,我在 CodeBase 键中看到了 .NET DLL 的完整路径。为什么使用 Prog ID / Class ID 的 COM 程序无法使用 CodeBase 找到 .NET DLL?
困惑之二:
GAC 特定于 .NET。它如何参与解析 COM 引用?