Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不首先注册COM服务的情况下构建.NET COMInterop项目_C#_.net_C++_Windows_Com - Fatal编程技术网

C# 在不首先注册COM服务的情况下构建.NET COMInterop项目

C# 在不首先注册COM服务的情况下构建.NET COMInterop项目,c#,.net,c++,windows,com,C#,.net,C++,Windows,Com,我正在构建一个与COM服务(.exe)交互的C#UI。VS2005 COM项目输出一个有效的类型库(TLB),该类型库由C#项目引用。但是,VS2005 C#项目坚持要注册服务才能构建C#项目,即使在使用OLE对象查看器检查时,typelib似乎完全有效 如果可能的话,我们不希望在构建服务器上注册该服务。此外,调试生成无法将COM对象注册为服务,因为这会使调试变得更困难,尤其是启动代码(不能使用F5-Start调试) 我应该寻找什么才能让它工作?我需要只注册TypeLib吗?如果是这样,为什么C

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

如果可能的话,我们不希望在构建服务器上注册该服务。此外,调试生成无法将COM对象注册为服务,因为这会使调试变得更困难,尤其是启动代码(不能使用F5-Start调试)

我应该寻找什么才能让它工作?我需要只注册TypeLib吗?如果是这样,为什么COMInterop会坚持注册服务或TLB以正确构建(而且,在Win2003和VS2005上是否有用于此的命令行工具)


如果我没记错的话,有一次我构建了一个引用Win2003 firewall COM对象的C#web服务,但我们在Win2000(它没有这样的东西)上构建它,只需引用TLB文件,而不需要注册,所以我不明白为什么现在会出现问题。

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


如果不想再提供另一个程序集,可以使用从生成的互操作程序集提取接口描述,并将其作为源文件包含到项目中。

通过向COM服务添加-regtypelib命令解决了这一问题,该命令调用AtlRegisterTypeLib函数,但不注册服务。次优,因为它将在构建服务器上保留注册表项,但速度快且有效。

对您的答案进行了投票,但只注册typelib更容易。