这是一个有点奇怪的问题,可能和大多数人想做的事情背道而驰,但我正在努力解决一个遗留的COM问题。
我有两个组件,这两个组件实际上都是.NET程序集,但出于历史原因,一个组件将另一个组件作为COM对象加载(该程序集是为COM互操作注册的)。它是一个插件架构,插件由其COM ProgID标识,因此这是我加载插件程序集所获得的唯一信息。
我尝试过的一种方法是:
var objType = Type.GetTypeFromProgID("My.ProgId");
var objLateBound = Activator.CreateInstance(objType);
IMyInterface netAssembly;
try
{
netAssembly = (IMyAssembly)objLateBound;
}
catch (Exception)
{
netAssembly = null;
}
如果对.NET接口的强制转换成功,我知道我有一个.NET程序集,可以通过接口访问它。然而,这项技术有点笨拙,我在COM方面遇到了一些问题,尤其是在64位系统上。如果可能的话,我宁愿不加载COM对象,直接将插件作为.NET程序集加载。
但是,我要讲的唯一信息就是插件的COM ProgID。
那么,如何从COM ProgID加载.NET程序集,
不创建任何COM对象
?