在没有首先注册COM服务的情况下构建.NET COMInterop项目

时间:2009-06-24 17:35:40

标签: c# .net c++ windows com

我正在构建一个C#UI来与COM服务(.exe)进行交互。 VS2005 COM项目输出一个有效的类型库(TLB),由C#项目引用。但是,VS2005 C#项目坚持要注册该服务以构建C#项目,即使在使用OLE对象查看器检查时类型库看起来完全有效。

如果可能,我们宁愿不在构建服务器上注册服务。此外,调试版本不能将COM对象注册为服务,因为这会调试一般,特别是启动代码更加困难(不能使用F5 - 开始调试)。

为了使这项工作,我应该寻找什么?我只需要注册TypeLib吗?如果是这样,为什么COMInterop会坚持要注册服务或TLB以便正确构建(并且,在带有VS2005的Win2003上是否有这样的命令行工具)?

如果我没记错的话,曾经有一段时间我构建了一个引用Win2003防火墙COM对象的C#Web服务,但我们只是通过引用TLB文件而没有注册就在Win2000上构建它(没有这样的东西)需要,所以我不明白为什么现在这应该是一个问题。

2 个答案:

答案 0 :(得分:2)

您需要使用tlbimp.exe工具创建互操作程序集。并在项目中添加对此程序集的引用,而不是typelib。在这种情况下,building不需要注册的com服务器。

如果您不想发送另一个程序集,可以使用Reflector从生成的interop程序集中提取接口描述,并将它们作为源文件包含在项目中。

答案 1 :(得分:0)

通过向COM服务添加-regtypelib命令来解决此问题,该服务调用AtlRegisterTypeLib函数但不注册服务。不够理想,因为它会在构建服务器上留下注册条目,但很快就会有效。