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