【问题标题】:Could not load file or assembly 'xxx' or one of its dependencies. An attempt was made to load a program with an incorrect format无法加载文件或程序集“xxx”或其依赖项之一。试图加载格式不正确的程序
【发布时间】:2010-12-11 12:24:54
【问题描述】:

我刚刚检查了从 Subversion 到新文件夹的修订。打开解决方案,我在运行时得到了这个:

无法加载文件或程序集“xxxx”或其依赖项之一。试图加载格式不正确的程序。

这是我不久前签入的相同代码。为什么现在要这样做?我现在还在那个 xxx 项目的 bin 文件夹中看到了 Debug x86 而不仅仅是 Debug。什么是 Debug x86,为什么我不像以前那样在 bin 文件夹中只有 Debug?

【问题讨论】:

标签: c#


【解决方案1】:

听起来项目的一部分是为仅 x86 构建的,而其余部分是为任何 CPU/x64 构建的。这也咬到我了。你在运行 x64(或者呃... IA64)吗?

检查项目属性并确保正在为“任何 CPU”构建所有内容。如果您在 Visual Studio 中,则可以通过转到屏幕顶部工具栏上的“x86”或“任何 CPU”菜单(在“调试”/“发布”菜单旁边)并单击来检查所有内容“配置管理器...”

【讨论】:

  • 它也在 Project->Properties->Build,或 Debug->Properties->Build。刚刚更新了 VS2015,版本 14.0.25123.00 更新 2。这个更新刚刚发布 5/10/16(昨天!)。我发现平台目标设置为 x64,这导致了错误。设置为“任何 CPU”修复它。
【解决方案2】:

如果您在 64 位服务器上运行 IIS 7+ 中的站点时遇到此错误,您的程序集可能是 32 位,并且您的应用程序池将选项“启用 32 位应用程序”设置为 False;将此设置为 true 并重新启动站点以使其正常工作。

【讨论】:

  • @Mayhem50 这里也一样。这取决于错误发生的位置。如果是通过 Visual Studio 和 Cassini Web 服务器,Fraser 是对的。如果它发生在 IIS7+ 中,尼克斯的回答可能是最有可能的解决方法。
  • 这对我来说是完美的答案(将站点从 x86 上的 IIS6 移动到 x64 上的 IIS 7)
  • 是的,它做到了。我将一个站点从 x86 上的 IIS6 移动到 x64 上的 IIS 7。非常感谢!
【解决方案3】:

我在尝试使用可怕的 Business Objects 4 for .Net SDK 时遇到此错误。

他们提供了五个 BusinessObjects*.dll 文件,但它们都是 64 位的。

要加载我的网页,我需要点击Tools\Options,然后在 VS2013 中更改此设置:

【讨论】:

  • 该选项对我来说不存在。在 Visual Studio 2010 下,此屏幕上的唯一选项是“使用 IIS Express 处理新的基于文件的网站和项目”
  • 我在 VS 2017 Professional 中有这个选项
【解决方案4】:

inetmgr 然后进入应用程序池->您的池的高级设置-> 将选项“启用 32 位应用程序”设置为 true; 并重新启动 IIS。 再检查一遍!

【讨论】:

  • 第二个。我为我的网站创建了一个新的应用程序池,但忘记切换此设置。
  • 这也为我修复了它。我需要更改的唯一另一件事是将管道更改为集成,因为在应用上述修复后这也给了我一个错误。
【解决方案5】:

在 IIS 上运行的应用程序上的 BadImageFormatException(不是从 VS 运行,因为 Visual Studio 通过使用“任何 CPU”的构建解决了该问题)可能由以下原因引起:

该站点是一个 x64 的服务器,并且应用程序池的启用 32 位应用程序的默认设置为 False。你有 32 位程序集

在 Visual Studio 级别上,解决方法是:

  1. 将项目设置“目标 CPU”更改为“ANYCPU”

【讨论】:

    【解决方案6】:

    确保验证“首选 32 位”的设置。在我的情况下,Visual Studio 2012 默认检查此设置。在我取消选中“首选 32 位”之前,尝试使用外部 DLL 中的任何内容都失败了。

    【讨论】:

      【解决方案7】:

      对于为 x86 兼容性而非任何 CPU 构建的某些项目,这绝对是一个问题。如果我不得不猜测,我会说您的项目之间的某些引用可能是引用某些 bin\debug 文件夹中的 dll,而不是项目引用。

      当为 x86 而不是“任何 CPU”编译项目时,dll 将进入 bin\x86\debug 文件夹而不是 bin\debug(这可能是您的参考资料所在的位置)。

      但无论如何,您应该在项目之间使用项目引用。

      【讨论】:

        【解决方案8】:

        如果在使用 IIS express 工作的 Visual Studio 中,当发布失败时,试试这个:

        【讨论】:

          【解决方案9】:

          在我的情况下,它通过转到项目属性并在目标框架下工作,我选择了 .NET Framework 4。这是因为我已经移动到一台已经安装了其他更高 .NET 框架的新机器,并且项目默认选择了它们. 看看适合你的目标框架。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-22
            • 2013-02-27
            • 2013-03-13
            • 2014-07-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多