System.BadImageFormatException:如何修复 .NET 版本不匹配?

Posted

技术标签:

【中文标题】System.BadImageFormatException:如何修复 .NET 版本不匹配?【英文标题】:System.BadImageFormatException: How to fix .NET version mismatch? 【发布时间】:2009-05-05 17:29:18 【问题描述】:

我在 VS 2005 中编写了一个 dll,它将由另一个在 VS 2003 中开发的程序加载。当该程序尝试加载我的 dll 时,它会抛出一个 System.BadImageFormatException: The format of the file 'Foo.dll' is invalid

我搜索了 SO 和 Google,似乎不同版本的 .NET 是罪魁祸首。我的问题是:我该如何解决这个问题?

(我无法修改VS 2003开发的程序。)

【问题讨论】:

这个链接也很有帮助:devlicio.us/blogs/ziemowit_skowronski/archive/2008/08/22/… 具有不同字长的本机(非托管)库也可能引发此异常。您需要获取正确字长的版本或构建与之匹配的托管应用程序。 【参考方案1】:

我在运行 64 位版本的 CLR 并尝试加载标记为仅 32 位的程序集时遇到此错误。在我的例子中,具体的程序集是作为 ODP.NET 一部分的 Oracle.DataAccess.dll。

【讨论】:

我也遇到了同样的错误(使用不同的程序集),你有什么解决办法吗? 您只需要确保在加载仅 32 位程序集时运行 32 位 CLR 这是我的问题的答案。我已经有一段时间没有遇到这种情况了,但是当一个人使用 COM 互操作时,在使用“任何 CPU”构建配置然后部署到 64 位服务器时遇到这种情况是很常见的。在这些情况下,x86 配置很方便。【参考方案2】:

解决方案:如果您使用的是 IIS7,请在网站的特定应用程序池上右键单击/高级设置,然后在启用 32 位应用程序上选择 True。它应该可以工作。

【讨论】:

【参考方案3】:

使用与您的 VS2003 项目相同的 .Net 版本编译 VS2005 项目。 或者,根据您的 VS2003 项目的大小,反射器并重写它。这是这里项目的常见做法,由于某些不明原因,没有更多可用的 VSS 版本。

【讨论】:

"使用与您的 VS2003 项目相同的 .Net 版本编译 VS2005 项目。"你能解释一下怎么做吗?我不知道如何选择我的项目的 .NET 版本。 在 VS 中右键单击您的项目,在第一个选项卡上您可以选择目标框架。 谢谢你,马库斯。虽然这在 VS 2005 中不起作用,但在 2008 版本中确实起作用。感谢您的帮助。 另外,就我而言,在使用 x86 库时,我还必须将项目构建平台目标更改为 x86(项目属性,构建选项卡)。

以上是关于System.BadImageFormatException:如何修复 .NET 版本不匹配?的主要内容,如果未能解决你的问题,请参考以下文章