实现托管COM对象中定义的接口的托管客户端

实现托管COM对象中定义的接口的托管客户端,com,Com,我希望有一个托管com对象,它公开接受作为参数对象的方法来实现给定的接口。像这样的 [ComVisible(true)] [Guid(".....")] class SomeClass { public void SomeMethod(ISomeInterface arg) ..... 显然,isomointerface也应该声明为ComVisible 现在我想在托管客户机中使用该COM对象,并在那里调用SomeMethod。问题是我需要实例化一个实现isomoInterface的对象。如果

我希望有一个托管com对象,它公开接受作为参数对象的方法来实现给定的接口。像这样的

[ComVisible(true)]
[Guid(".....")]
class SomeClass {

public void SomeMethod(ISomeInterface arg)
.....
显然,
isomointerface
也应该声明为
ComVisible

现在我想在托管客户机中使用该COM对象,并在那里调用
SomeMethod
。问题是我需要实例化一个实现
isomoInterface
的对象。如果这是一个本机COM对象,我会自动生成一个互操作程序集,这不会是一个问题。但无法为托管COM对象生成互操作程序集

我看到.NET4.0引入了类型等价的概念。看起来我可以使用
ComImport
属性手动生成互操作。但这看起来是一项相当糟糕的工作。我想我也可以使用
TypeIdentifierAttribute
,但是关于它的文档很模糊,上面说它主要是供编译器使用的


那么还有其他方法吗?

这是反向的。让托管代码使用COM互操作是没有意义的,它应该简单地添加对程序集的引用并直接使用该类。使用此[ComVisible]类的本机代码应使用您使用Tlbexp.exe或Regasm.exe/tlb选项创建的类型库,以便使用正确的接口定义。类型等价很好地避免了PIA,这不是一个问题。我有一个相当复杂的部署场景,涉及将多个程序集合并到单个程序集。因此,向原始程序集添加引用并不是一件简单的事情。此外,我的托管COM对象很可能由使用早期版本的.NET framework的客户端实例化。所以直接引用不起作用。这些都不是阻止添加引用的原因。所以我可以有一个引用.NET 4.0程序集的.NET 3.5程序集?