Eri*_* J. 8 gac com-interop regasm
一个客户想要从VB6使用我们的.NET DLL.它们旨在支持反向互操作,所有工作都很好......除了:在两个不同的目录中有两个单独的VB6程序.似乎有必要做一个:
这是客户的观察,也得到了RegAsm文档的支持:
使用Regasm.exe注册程序集后,可以将其安装在全局程序集缓存中,以便可以从任何COM客户端激活它.如果程序集仅由单个应用程序激活,则可以将其放在该应用程序的目录中.
我对这一点感到困惑.
第一点困惑:
据我所知,COM运行时使用Prog ID/Class ID定位DLL.当我在类ID条目的注册表中查看时,我在CodeBase键中看到了.NET DLL的完整路径.为什么使用Prog ID/Class ID的COM程序无法使用CodeBase找到.NET DLL?
第二点困惑:
GAC特定于.NET.它如何参与解析COM引用?
你是对的COM使用ProgId到达ClassId来加载COM服务器.对于.NET COM dll,COM服务器实际上是MSCOREE,而不是.NET dll({CLSID}/localserver32下的默认密钥的值).MSCOREE,而不是COM,然后可以使用它想要的任何规则来查找.NET程序集.
在这一点上,我不知道.NET真正做了什么 - 这需要测试.您可以使用FUSLOGVW观察自己.但是,我可以猜测它加载程序集就像加载任何其他.NET程序集一样.
假设它只使用ClassName值调用Assembly.Load(),它将遵循.NET绑定规则.首先看一下GAC,如果没有找到将探测 - 所以如果定义了一个代码库,它只会查看那里,否则它将根据应用程序库进行探测(默认情况下是应用程序的目录[但不适用于ASP.NET] ]).
我认为这符合您的解释.
你的问题太旧我认为它已经出窍,但你会使用将组件的规则应用程序目录,使用一个代码库,或在GAC是相同与和W/O COM互操作.每种情况都不同,我没有做足够的.NET来放弃任何深刻的见解.我赞成XCOPY安装,因此我会在应用程序目录中去(和使用注册免费COM),但也有其他方面的考虑一样,如果两个VB程序必须使用COM对象的同一版本.
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |