C# 使用COM与ToolsVersion=";一起从注册表加载类;2.0“;但在ToolsVersion=";4.0“;

C# 使用COM与ToolsVersion=";一起从注册表加载类;2.0“;但在ToolsVersion=";4.0“;,c#,visual-studio-2010,com,vb6,merge-module,C#,Visual Studio 2010,Com,Vb6,Merge Module,我有一个c#项目,它使用一个内部vb项目作为COM 当我将该项目转换为VS 2010时,下面这行代码向我抛出了一个异常: Set RTCClient_ = New RTCCORELib.RTCClient RTCCore.RTCClient是Microsoft Merge Module for RTC(RTC客户端API 1.2)的一部分,您可以将其嵌入到安装包中(在我的例子中,它包括EXE) RTCCore.RTCClient是在HKEY\u CLASSES\u ROOT\RTCCore.R

我有一个c#项目,它使用一个内部vb项目作为COM

当我将该项目转换为VS 2010时,下面这行代码向我抛出了一个异常:

Set RTCClient_ = New RTCCORELib.RTCClient
RTCCore.RTCClient
是Microsoft Merge Module for RTC(RTC客户端API 1.2)的一部分,您可以将其嵌入到安装包中(在我的例子中,它包括EXE)

RTCCore.RTCClient
是在
HKEY\u CLASSES\u ROOT\RTCCore.RTCClient

我得到的错误是:

错误:自动化错误
找不到指定的模块。(-2147024770)

但是,如果我正在更改csproj并使用
ToolsVersion=“2.0”
以上代码行可以工作,我可以获取RTCClient对象


出现了什么问题?

尝试在项目中COM库引用的属性中将“嵌入互操作类型”设置为
false
。我的是C#,但你的VB.Net可能也有


您可以演示如何从C#调用COM对象吗?我认为您的问题中缺少一些信息。请澄清什么是RTCCORELib.RTCClient;确认VB项目本身是否实现了COM服务器;并解释C#项目的作用以及它与此VB代码的具体关系。我的水晶球说:“在错误时删除
,然后从该代码中恢复下一个
,这样您将得到正确的诊断”球仍然在说:“这是错误代码0x8007007E,一个Windows错误代码。它意味着在尝试加载DLL时“找不到文件”。找不到DLL的原因很多,一个典型的原因是在运行Regasm.exe注册C#程序集时忘记使用/codebase选项。您可以使用SysInternals的ProcMon实用程序查看它在哪里查找DLL。@DorCohen如果您怀疑“2.0”和“4.0”之间的生成过程中存在某些差异,您可以在Visual Studio 2010中通过“工具->选项->项目和解决方案->生成和运行->MSBuild项目生成输出详细信息”。