【发布时间】:2010-04-19 14:46:30
【问题描述】:
我有一个要从 .NET 3.5 升级到 .NET 4.0 框架的应用程序。它使用一个引用的 COM 库。它在 3.5 中没有问题,但在转换为 4.0 后,我无法让 COM 工作。 COM 来自第 3 方,因此我们没有自己开发。
我收到以下 COM 错误(一般 COM 错误,并非特定于 COM 对象本身):hr = 0x8007000b
CLR 给我:“在类型 'Skype_Business_Launcher.Main' 上调用与指定绑定约束匹配的构造函数引发了异常。”行号“3”和行位置“5”。
还有 C# 日志:
=== 预绑定状态信息 === 日志:用户 = \phillip 日志:DisplayName = Interop.SKYPE4COMLib,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null (完全指定) 日志:Appbase = file:///bin/Debug/ 日志:初始 PrivatePath = NULL
调用程序集:Skype Business Launcher,Version=1.0.5.0,Culture=neutral,PublicKeyToken=null。
LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件: LOG:使用主机配置文件: LOG:使用 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config 中的机器配置文件。 日志:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)。 日志:正在尝试下载新的 URL 文件:///bin/Debug/Interop.SKYPE4COMLib.DLL。 ERR:无法完成程序集的设置(hr = 0x8007000b)。探测终止。
出于安全原因,我删除了路径名,但我检查了所有路径信息,并且全部正确。 COM 库文件也存在于它指向的位置。它也被复制到项目中的 OBJ 文件夹中。
最初我收到一个关于 COM 库不支持嵌入类型的错误,所以我将“嵌入互操作类型”设置为 false(下面是真的)并且错误消失了,但我不确定这是否与此错误有关或不是这样,我想我会提到它以防万一。
同样,它适用于 3.5。
谢谢,
【问题讨论】:
-
在黑暗中拍摄:看起来您使用的是 x64 版本的框架。 3.5 已经是这种情况了吗? COM 服务器是 DLL 还是 EXE?
-
嗯.. 不确定 3.5 是 32 位还是 64 位。实际上,我认为他们将其设置为“任何 CPU”。这让我们想知道 COM 是否只有 32 位。明天我会尝试强制 32 位模式并报告。 COM 是一个 DLL。它没有 EXE 条目或界面。
-
如果 COM 是 DLL,则 DLL 和您的程序之间需要有“位”匹配。
-
@Timores 没错!将项目更改为仅针对 32 位,COM 工作没有任何问题!谢谢!
-
(您能否将您的回复“A shot in the dark”设置为答案,以便我将其标记为正确答案?)