"即使平台相同,也试图加载格式不正确的程序"

Dav*_*own 448 .net 64-bit pinvoke 32-bit badimageformatexception

我在64位系统上调用32位非托管DLL的函数.我得到的是:

BadImageFormatException:尝试加载格式不正确的程序.(HRESULT异常:0x8007000B)

起初,我将我的项目设置为Any CPU平台,因此我将它们都更改为x86,但此错误仍在发生.这真的是我所知道的唯一解决方案.

DLL没有损坏或任何东西,因为我可以将它们与其他程序一起使用(我没有源代码).我想也许它没有找到依赖,但我检查了,他们都在那里.另外,DllNotFoundException在这种情况下不会抛出一个吗?

我还可以做些什么?在您说"使用64位非托管DLL"之前,让我指出没有一个.;)

blu*_*001 523

如果您尝试在IIS 7(和/或64位操作系统计算机)上运行32位应用程序,您将收到相同的错误.因此,从IIS 7中,右键单击应用程序的应用程序池并转到"高级设置"并将"启用32位应用程序"更改为"TRUE".

重新启动您的网站,它应该工作.

在此输入图像描述

  • 这个答案对我来说是一个重要的因素,因为这个问题根本没有提到IIS! (4认同)
  • 以下是关于绩效问题的一个很好的讨论:http://stackoverflow.com/questions/507820/what-are-the-pros-and-cons-of-running-iis-as-32bit-vs-64bit-在-A-64-OS (2认同)

Dav*_*own 126

不知何故,配置管理器中的Build复选框已取消选中我的可执行文件,因此它仍然使用旧的Any CPU版本运行.在我修复之后,Visual Studio抱怨它无法调试程序集,但是通过重新启动修复了这个问题.

  • 我将选项Any CPU更改为X86,它对我有用..! (6认同)

Mar*_*ane 71

Visual Studio中,右键单击您的项目 - >在左侧窗格中单击" 生成"选项卡,

项目属性,构建选项卡

Platform Target下选择x86(或者更常见的是与您链接的库匹配的体系结构)

项目属性,平台目标

我希望这可以帮助别人!:)

  • 这解决了我在VS2013中的问题,我发现另一个修复方法是将"平台目标"保留为"任何CPU",但选中"首选32位"复选框. (2认同)
  • 虽然您需要使用.NET 4.5或更高版本才能检查"首选32位"复选框 (2认同)

Den*_*nis 50

我也遇到了这个问题.在这里尝试了所有的建议,但他们没有帮助.

我找到了另一件要检查的东西,为我修好了.在Visual Studio中,右键单击项目并打开"属性".单击"编译"(或"构建")选项卡,然后单击底部的"高级编译选项".

检查下拉菜单"目标CPU".它应该与您正在构建的"平台"相匹配.也就是说,如果您正在构建"任何CPU",那么"目标CPU"应该说"任何CPU".通过激活它们来检查所有平台并检查此设置.

  • 对于我们这些只使用编译器的人来说,我的修复是将"/ platform:x86"添加到编译器标志中. (2认同)

pai*_*boo 42

如果在单击绿色箭头按钮运行应用程序时遇到此错误,但仍希望以64位运行该应用程序.您可以在VS 2013,2015和2017中执行此操作

转至:工具>选项>项目和解决方案> Web项目>使用64位版本的IIS Express

  • 谢谢.我尝试了这么多,没有任何帮助.你是我的生命保护者.我有64位操作系统,安装了64位Visual Studio [由于未知原因仍然以32位运行].当我将我的平台目标放到x64时,它抛出错误BadImageFormatException.通过您的修复,它工作.我给了你一个upvote.你摇滚 (3认同)

Dre*_*kes 34

如果您使用的是任何CPU,则在选中" 首选32位"选项时可能会遇到此问题:

确保在项目属性的Build选项卡中取消选中此选项!

在此输入图像描述

  • 如果您可以在Visual Studio中指明找到此选项的位置,将会很有帮助. (3认同)

Sti*_*ack 8

这篇文章有点偏离主题,但搜索此错误消息将我带到了这里.

如果您正在通过团队系统构建并获得此错误,则构建定义过程选项卡具有"MSBuild平台"设置.如果将其设置为"自动",则可能会遇到此问题.将其更改为"X86"也可以解决错误.


小智 8

在我的情况下,我在C#中使用本机DLL.此DLL依赖于其他几个缺失的DLL.一旦添加了其他DLL,一切正常.

  • 这个答案隐藏在所有用于检查“目标架构”的重复解决方案之间。这个答案应该更引人注目,因为它提出了一个新的想法(这导致了我的案例的解决)。 (2认同)

luv*_*tor 6

在 Visual Studio 2019 中,当我想运行测试(直接来自 VS 的 MSTest)时,我遇到了类似的问题。就我而言,我只有一个 x64 本机 DLL,并且收到了此错误消息。首先,我认为这是因为 Visual Studio 以 x86 运行,但此页面帮助我解决了问题:

将单元测试作为 64 位进程运行

它说

  1. 将您的项目设置为任何 CPU
  2. 显式定义处理器架构

我做了两个(我明确设置了 x64),然后我的测试开始工作。

将处理器架构显式设置为 x64


小智 5

我们遇到了类似的问题,我们设法通过将平台目标设置为 x86 来修复它。 项目属性-> 构建


小智 5

1:转到:工具>选项>项目和解决方案>Web项目>使用64位版本的IIS Express 2:更改Web服务项目的以下设置。 在此处输入图片说明