【问题标题】:BadImageFormatException when targeting 'AnyCPU' on 64-bit machine在 64 位机器上定位“AnyCPU”时出现 BadImageFormatException
【发布时间】:2012-11-09 02:55:20
【问题描述】:

当我将源代码转移到Win7 64-bit 机器上时,当我尝试编译和运行以AnyCPU 为目标的解决方案时,我得到一个BadImageFormatException

XP 32-bit 不会发生这种情况。

有什么问题?

【问题讨论】:

  • 这是运行时错误,不是编译时错误。如果您不知道您可能使用的是什么 32 位组件,那么一个明显的解决方案是针对 x86。
  • 但是当我在XP 32-bit 上定位AnyCPU 时,这很好。如果我以x86 为目标,编译后的应用程序会在x64 上运行吗?
  • 你的程序集中有任何 PInvoke/unsafe/COM 等代码吗?
  • @Pawel:代码中有COM和外部DLL调用。
  • 在我看来,您的应用程序正在尝试以 64 位模式运行,但您使用的本机 dll 之一(COM 或 dll)没有 64 位版本(或者可能是您使用的程序集设置为 x86?-我不确定这是否会触发 BadImageFormatException)。然后 dll 被加载到 64 位进程并且你有崩溃。请注意,由于内置 x86 模拟器,32 位本机代码可以在 64 位机器上运行。因此,如果您以 AnyCPU 为目标,您的应用程序将在 x86 和 x64 上运行。

标签: .net visual-studio 64-bit badimageformatexception anycpu


【解决方案1】:

当您更改 .csproj 的目标框架并将其恢复为您开始使用的框架时,通常会发生这种情况。

如果支持,请确保 1 运行时版本=“与 cs 项目目标不同的运行时”在 app.config 中的启动标记下。

确保 2 这也意味着检查可能是属性文件夹中的其他自动生成文件或其他文件,以查看这些文件与 .csproj 文件中定义的文件之间是否不再存在运行时不匹配。

在您开始尝试使用项目属性进行不同操作以克服错误之前,这些可能会为您节省大量时间。

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 2012-06-12
    • 2017-02-21
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    相关资源
    最近更新 更多