【问题标题】:BadImageFormatException when running application运行应用程序时出现 BadImageFormatException
【发布时间】:2014-03-10 16:18:34
【问题描述】:

在运行具有 Any CPU 配置的 C#/VB SmartClient 应用程序时,我得到一个 BadImageFormatException。如果我使用x86 配置,那么它运行良好。这是一个旧的遗留项目,我偶尔需要修改它并且我不知道历史,所以我只能猜测包含 32 位本机代码的 dll 会导致此错误。这一切都是有道理的,除了当配置为Debug & AnyCPU 时它运行,只有当配置为Release & AnyCPU 时它才会失败。我发现 Debug.cfg.xml 和 Release.cfg.xml 文件没有显着差异。

谁能说出为什么它会在Debug 配置中运行?由于这行得通,我想知道是否有可能让它在 x64(即 AnyCPU)中运行

来自 app.config:

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>

【问题讨论】:

  • 使用 AnyCPU 构建“旧”.NET 应用程序但从未在 64 位操作系统上实际测试过的情况很常见。并且依赖于 32 位本机代码。当然,将目标更改为 x86 是正确的做法。不是解决方案的平台名称,它无关紧要,唯一重要的是 EXE 项目的设置,项目 + 属性,构建选项卡。
  • 您是通过 IDE 在调试模式下运行,还是在调试模式下构建并直接启动应用程序?
  • IDE 中的调试模式 (Visual Studio 2010)

标签: c# vb.net badimageformatexception


【解决方案1】:

您的应用程序几乎肯定依赖于 32 位组件。当您将应用程序作为 64 位进程运行时,它无法将该 32 位组件加载到您的进程中。

可能的解决方案包括:

  1. 恢复为 32 位运行。
  2. 查找依赖组件的 64 位版本。

【讨论】:

  • 是的,它目前使用 32 位构建。它如何在 Debug 中构建而不在 Release 中构建的问题仍未解决。
  • 构建?这是一个运行时错误。你能清楚问题是什么吗?你现在似乎在自相矛盾。
  • 对不起,runs,不是builds。我的错。
  • 好吧,您确实需要弄清楚为什么有时以 32 位运行,有时以 64 位运行。
  • 从不以 64 位运行,始终以 32 位运行。
【解决方案2】:

尝试将窗口或表单图标图像格式从 .jpg 更改为 .png。有时在 Windows 服务器上,由于图标图像格式而发生此错误。

【讨论】:

  • 感谢您的建议,我不知道这个。碰巧的是,所有图像文件都已经是 .png。
  • 我必须说我很难相信。
  • 但我必须说我很高兴我的问题得到了一次解决。
  • 我很抱歉描述了我的意思。
  • 应用程序图标不能是 jpeg 是真的,但我认为加载器不会拒绝这样的可执行文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多