【问题标题】:why does a 32-bit value cause a WCF System BadImageFormatException?为什么 32 位值会导致 WCF 系统 BadImageFormatException?
【发布时间】:2019-05-06 19:45:15
【问题描述】:

我使用 Visual Studio Community 2017 中的文件系统在本地发布了一个带有 WCF 服务的小型 Web 应用程序。我在本地托管它以对其进行测试,我注意到单个 WCF 服务未被调用并引发了 System.BadImageFormatException。原因是来自 Int32 类型方法的单个 id 变量。 配置管理器中的解决方案平台是具有任何 CPU 的“混合平台”。所以问题不存在。 通过在应用程序池中启用 32 位应用程序,我遵循了 bluwater2001、here 的解决方案。但是我的问题仍然存在:为什么 32 位变量会导致这样的错误,而我的 Web 应用程序是为任何 cpu 和混合平台构建的?为什么必须在 IIS 的应用程序池中启用 32 位应用程序?

【问题讨论】:

  • “原因是来自 Int32 类型方法的单个 id 变量” - 不。您的应用程序以 64 位运行,并且正在加载一个 32 位的程序集。
  • BadImageFormatException 也必须告诉您它无法加载哪个 dll,使用融合日志查看器查看程序集尝试加载的位置。
  • 这真的取决于给你异常的上下文,因为当根本原因不同时,BadImageFormatException 可能会发生。 “所以问题不存在”也不正确。你只检查了自己的项目,但是一个典型的项目可以有多个依赖关系,如果根本原因是位不匹配,所有这些都可能触发此类异常(位不匹配只是可能的根本原因之一,并且可能是最容易理解和排除故障的原因)。因此,请您进行更多调查,并编辑问题以包含完整的异常调用堆栈和其他重要信息。

标签: c# wcf iis application-pool int32


【解决方案1】:

这与你的变量/参数的类型无关。

如果您选择 AnyCPU,您的代码可以在任何平台上运行。它将在 32 位机器上编译成 32 位代码,在 64 位机器上编译成 64 位代码。

如果您的程序集作为 32 位进程运行,则它无法加载 64 位程序集,反之亦然。如果它尝试加载与进程不匹配的程序集,则会收到 BadImageFormatException。

【讨论】:

  • 位不匹配只是BadImageFormatException的常见原因之一。所以现在下结论还为时过早。
猜你喜欢
  • 2016-01-22
  • 1970-01-01
  • 2016-12-18
  • 2020-09-16
  • 2014-08-08
  • 1970-01-01
  • 2015-11-15
  • 2014-04-27
  • 2010-11-10
相关资源
最近更新 更多