2009-06-24 79 views
1

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

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

我应该寻找什么才能使其发挥作用?我是否需要注册TypeLib?如果是这样,为什么COMInterop会坚持让服务或TLB注册才能正确构建(并且,在VS2005的Win2003中是否有这样的命令行工具)?

如果我记得正确的话,一旦我建立了一个引用Win2003防火墙COM对象的C#web服务,但是我们仅仅通过引用TLB文件而没有在Win2000上构建它(它没有这样的东西)需要注册,所以我不明白为什么这应该是一个问题了。

回答

0

通过向COM服务添加-regtypelib命令解决此问题,该服务调用AtlRegisterTypeLib函数,但不注册该服务。不理想,因为它会在构建服务器上留下注册条目,但速度很快,而且工作正常。

2

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

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

+0

Upvoted你的答案,但只是注册typelib更容易。 – 2009-06-24 18:30:33

相关问题