即使在平台相同的情况下,也会尝试加载格式不正确的程序

我从64位系统上的32位非托pipeDLL调用函数。 我得到的是:

BadImageFormatException:试图加载格式不正确的程序。 (从HRESULTexception:0x8007000B)

起初,我把我的项目设置为任何CPU平台,所以我将它们都更改为x86,但是这个错误仍然在发生。 这真的是我所知道的唯一的修复。

该DLL没有损坏或任何东西,因为我可以使用他们与其他程序(我没有来源)。 我想也许这不是find依赖,但我检查,他们都在那里。 另外,在这种情况下不会抛出DllNotFoundException

我还可以做些什么? 而在你说“使用64位非托pipeDLL”之前,让我指出没有一个。 ;)

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

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

在这里输入图像描述

不知何故,Configuration Manager中的Buildcheckbox对于我的可执行文件来说是没有选中的,所以它仍然在旧的Any CPU版本上运行。 我解决之后,Visual Studio抱怨说,它不能debugging程序集,但重新启动修复。

Visual Studio中 ,右键单击您的项目 – >在左侧窗格上,单击“ 构build”选项卡,

项目属性,生成选项卡

在“ 平台目标”下selectx86(或者更一般地说,与您要链接的库匹配的架构

项目属性,平台目标

我希望这可以帮助别人! 🙂

我也有这个问题。 尝试了所有的build议,但他们没有帮助。

我发现另一件事来检查,固定它给我。 在Visual Studio中,右键单击该项目并打开“属性”。 点击“编译”选项卡,然后点击底部的“高级编译选项”。

检查下拉“目标CPU”。 它应该匹配你正在构build的“平台”。 也就是说,如果你正在构build“任何CPU”,那么“目标CPU”应该说“任何CPU”。 通过使其处于活动状态来检查所有平台,并检查该设置。

如果您正在使用任何CPU ,如果选中“ 首选32位”选项,则可能会遇到此问题:

确保在项目属性的“ 生成”选项卡中取消选中此选项!

在这里输入图像描述

如果您在单击绿色箭头button运行应用程序时遇到此错误,但仍希望以64位运行应用程序。 你可以在VS 2013或2015中做到这一点

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

这篇文章有点偏离主题,但search这个错误消息把我带到这里。

如果您正在通过团队系统构build并获取此错误,构build定义stream程选项卡将具有“MSBuild平台”设置。 如果这被设置为“自动”,您可能会遇到此问题。 将其更改为“X86”也可以解决该错误。

在我的情况下,我在C#中使用本机DLL。 此DLL依赖于其他几个DLL丢失。 一旦这些其他的DLL被添加一切工作。

也看到这个答案 ,为我解决了同样的问题。

发布者Luis Mack于2010年5月12日上午8时50分我已经find了同样的问题,只在一个特定的项目,当在64位机上编译。 SEEMS工作的一个修复是手动修改图像stream中的一个字符每当用户控件或窗体在devise器中编辑

  AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w 

改成

  AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w 

那就是00LjAuMC4w回到0yLjAuMC4w的行尾(00回到0y)

在我的情况下,我正在使用一个微小的.exe通过reflection重新加载引用的DLL。 所以我只是做这些节省我的一天的步骤:

从解决scheme资源pipe理器的项目属性,在构build选项卡上,我select目标平台x86

在我的情况下,我通过MSTest运行testing,发现我正在将32位和64位DLL部署到testing目录。 该程序偏爱64位DLL并导致其失败。

TL; DR确保您只部署32位DLL进行testing。

我以“Windows”方式解决了这个问题。 检查完所有设置后,清理解决scheme并重新构build解决scheme,然后closures解决scheme并重新打开。 然后,它的工作,所以VS可能没有摆脱一些东西在清洗。 当逻辑解决scheme不起作用时,我通常转向不合逻辑的(或看起来不合逻辑的)逻辑解决scheme。 Windows不让我失望。 🙂

我能够通过将我的构build版本与服务器上的.NET版本进行匹配来解决此问题。

我双击.exe只是为了看看会发生什么,它告诉我安装4.5 ….

所以我降级到4.0,它的工作!

所以确保你的版本匹配。 它在我的开发箱上运行良好,但服务器有更旧的.NET版本。

在我的情况下,这是错误的文件内容。 DLL从网上下载,但DLL的内容是HTML页面:D尝试检查它是否是二进制文件,如果它看起来像正确的DLL 🙂

build立在@paibamboo的答案上

他说:转到:工具>选项>项目和解决scheme> Web项目>使用64位版本的IIS Express

我的同事检查了这个盒子(他明确地寻找它),但是有错误信息。 几个小时后,他没有选中这个盒子并再次检查。 瞧,现在的代码已经成功了。

看来有两个地方保存了这个盒子的状态,这个地方变得不同步。 取消并重新检查它再次同步。

对更多知情用户的问题:是否有一个更新或上周(对于VS 2015)去同步国家?