2012-02-23 42 views
25

有关可能导致此异常的任何想法?无法加载文件或程序集异常

我有一个web服务凸出,当我加载的链接我得到

无法加载文件或程序集“Interop.DIB”或它的一个依赖。试图加载格式不正确的程序。
异常详细信息:System.BadImageFormatException:无法加载文件或程序集“Interop.DIB”或其某个依赖项。试图加载格式不正确的程序。

内部异常:

[BadImageFormatException:未能加载文件或程序集 'Interop.DIB' 或它的一个依赖。试图加载格式不正确的程序。]

[ConfigurationErrorsException:无法加载文件或程序集'Interop.DIB'或其某个依赖项。试图加载程序的格式不正确。]

[HttpException(0x80004005):无法加载文件或程序集“Interop.DIB”或其某个依赖项。试图加载程序格式不正确]

版本信息:
Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.272

+0

,我不知道什么是“DIB”是,但看起来像外部DLL缺失或不支持(编译为32位,但在64位用吗?) – Simon 2012-02-23 19:05:18

+0

你为什么不打开融合记录了吗?此外,什么是“interop.DIB”,它在哪里,是否与解决方案的其余部分一样针对相同的架构进行编译? – Will 2012-02-23 19:06:28

回答

75

好吧,答案是要开始 - >运行 - >键入inetmgr,并在左边的应用程序池,选择DefaultAppPool和应用程序的虚拟目录名称,并确保启用32位应用程序为true,上午使用IIS7.0和Windows 7 64位。 enter image description here

+0

哇,谢谢你的回答。我希望错误消息会引用具体导致错误的策略/属性。本来很高兴听说我的dll格式不正确,因为IIS设置为不允许使用32位应用程序,因此只需要64位组件 – Erikest 2012-09-20 00:10:02

+1

Seem的你创造了我的一天,因为x64机器上的新应用程序池不会“ t默认使用x32 dll – 2012-10-24 12:19:01

+1

这工作!谢谢 – Nick 2013-02-13 16:03:35

1

如果我不得不猜测,它可能是a)找不到互操作程序集或b)COM DLL未在本地注册表中注册。当您使用COM进行monkeying时,只需将DIB复制到/ bin文件夹是不够的。

我认为(B)是发生事件的最可能的答案。

3

根据我的经验,最常见的原因是您对引用的程序集进行了更改,该程序集要求使用该更改的程序集重新构建其他程序集,并且不重建它们。

示例#1:您有一个引用DLL的EXE。你添加一些东西到引用的DLL中,添加一个新的方法,新的参数,不管。这改变了DLL的外部“签名”;即各个入口点的内存位置。你不重建EXE。当EXE加载并尝试引用新的DLL时,其旧入口点不再有效,因此无法执行它所需的代码。

示例2:您有一个引用DLL的x86 EXE。此DLL还必须针对x86(或任何CPU)进行编译。如果重建它为x64,那么运行在32位空间中的EXE将不理解指令并注册对64位“扩展”世界的引用,并会哭泣叔叔。

25

BadImageFormatException通常意味着64与32位冲突。其中一个组件被设置为特定平台,即64位或32位,而另一个被设置或默认为不同的一个。检查两个程序集是否适用于相同的平台,最好是“任何CPU”。换句话说,它可能是64位程序集试图加载32位或反之。

这也适用于如果您调用COM或针对不同平台编译的DLL,例如,您可以在装配平台默认为x64的64位系统上从装配中调用32位COM/DLL。在这种情况下,调整您的装配平台以匹配。

要更改的平台去项目属性 - >建设 - >平台。

0

什么工作对我来说是集添加到GAC。要做到这一点,我跑GACUTIL -i从Visual Studio命令PATH_TO_ASSEMBLY提示

+0

更新:什么也工作是找出应用程序域使用** AppDomain.CurrentDomain.BaseDirectory **并复制那里的程序集 – Dublin7 2013-05-29 08:54:07

0

我终于通过删除IIS快递(C在对ApplicationHost.config进入此异常周围有:\用户{用户名} \文档\ IISExpress \ CONFIG \对ApplicationHost.config)。

我也停止了IIS Express实例,清洁和VS.重建然后更改配置文件,然后重新VS 2013

0

这个问题的另一种是改变你的项目的构建性能。

对于vb.net得项目 - >属性 - >编译 - >高级编译选项 这里改变目标CPU

2

我对Visual Studio的2015年同样的问题在Windows 10 64。我已经在任何CPU模式下编译。这是一个默认的MVC4应用程序(没有添加)。我发现在这里一个简单的解决方案,为我工作: https://github.com/aspnet/Home/issues/524

在VS 2015: 工具>选项>项目和解决方案> Web项目>使用IIS快速的64位版本的网站和项目

4

我有这个问题,试图使用64位的.dll在我的ASP.Net项目,在Visual Studio 2013年

的解决方案时,是点击工具\选项,然后勾选此选项:

enter image description here

+2

该指针。惊人。你是手动执行还是从一些截图应用程序? – trnelson 2016-11-04 18:44:48

+2

哈哈!我发现它在网络上的某个地方,并经常在我的StackOverflow文章中使用它来振奋一些无聊的图像! – 2016-11-05 07:10:19

+0

这为我工作 – MIKE 2017-12-01 19:33:01

0

什么工作对我来说是当仁不让的机器上的BIOS更新!

相关问题