2011-06-30 22 views
1

我有一个项目带有标记为ComVisible(true)的单个接口。如果我构建项目,则会收到警告MSB3214:“”不包含任何可以为COM Interop注册的类型。注册具有COM可见接口的Interop程序集的程序集仅给出警告MSB3214

但是,如果我创建一个空类,给它一个默认的构造函数并用ComVisible(true)标记它,我不会收到警告MSB3214。我看到注册的类,但我没有看到我的注册表中的界面。

我缺少什么?

回答

2

这是设计,尽管Jays链接。 Regasm.exe只为实现接口的具体类写入注册表项。 ProgID和CLSID键。 COM确实有接口注册(HKCR \ Interfaces),但只有代理注册在那里。 .NET没有创建代理的机制。

仅与的程序集接口声明仅用于创建类型库,允许其他项目实现它们。创建类型库不是问题,请使用Tlbexp.exe

+0

建议的替代方案那么,这是否意味着我可以使用Tlbexp注册表类型库? –

+0

也不需要注册不包含具体COM类的类型库。你真的想做什么? –

+0

我有从C++调用的接口。我试图让这些接口由具体的类来实现,而不管它们是否暴露给COM。我结束了只是将接口放入我的COM包装DLL>再次感谢。 –

0

看起来可能是一个Visual Studio 2008的臭虫在2008年7月报道:VS creates no type library for a project containing solely C# interfaces (MSB3214)

没有列出任何变通办法。

在响应数据2009年9月微软,他们(大概)能够解决这个问题:

我们能够解决这个问题和 错误将在未来 发行的该产品是可用。

(假设他指的是错误修复将在下一版本)

我找不到任何证据的错误是固定的。

+0

感谢您的回复。让我调查由Hans P. –

相关问题