【问题标题】:Upgrading App from .NET 3.5 to 4.0, COM fails now将应用程序从 .NET 3.5 升级到 4.0,COM 现在失败
【发布时间】: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”设置为答案,以便我将其标记为正确答案?)

标签: com .net-4.0


【解决方案1】:

在黑暗中拍摄:看起来您使用的是 x64 版本的框架。 3.5 已经是这种情况了吗? COM 服务器是 DLL 还是 EXE?

如果 COM 服务器是 DLL,则 DLL 和您的程序之间需要“位”匹配。

【讨论】:

  • 是的,请检查您的 TARGETS x64 和 x86 查找是否不匹配。
【解决方案2】:

当您将项目转换为 4.0 时,IDE 可以执行将 COM 库转换为 4.0 的问题。

当您将项目转换为 4.0 时删除 com 库,然后将其重新包含在您的项目中,然后我认为它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 2011-02-13
    • 1970-01-01
    • 2011-09-17
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    相关资源
    最近更新 更多