479

我有两个项目,ProjectAProjectB. ProjectB是一个控制台应用程序,它依赖于ProjectA. 昨天,一切正常,但今天当我跑步时突然发现ProjectB

BadImageFormatException 未处理
无法加载文件或程序集“ProjectA,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。

两者都只是常规项目,不依赖于任何其他非 .Net 项目。两者都是完全的 .Net - 没有本机代码,也没有 P/Invoke。我还有其他项目依赖ProjectA并且仍然可以正常工作。

我尝试过的事情:

  • 确保两个项目都设置为“任何 CPU”,并选中构建复选框。他们是。
  • 确保两个项目都用于相同的目标框架(.Net 4.0 客户端配置文件)
  • 在 ProjectB --> References --> ProjectA --> Properties 下,确保“Copy Local”设置为“True” _ (我验证 ProjectA.dll 被正确复制)
  • 清理/重建解决方案。我什至尝试手动删除两个项目中的 /bin 和 /obj 文件夹。
  • 重新启动 Visual Studio。重新启动我的电脑。
  • 查看存储库的全新副本。

但我仍然得到同样的错误。我不知道我做了什么导致这个,也不知道如何解决它。有任何想法吗?

4

29 回答 29

747

我很确定您遇到了 32 位/64 位冲突。听起来您的主项目可能设置为 32 位,而其引用的类设置为 64 位。尝试查看这个 SO questionthis one。在他们两个之间,你应该能够找出你的问题。

于 2012-07-07T01:47:49.527 回答
231

在服务器上部署后,您的网站可能会遇到问题。

然后您需要调整您的应用程序池以启用 32 位应用程序

脚步

  1. 打开 IIS 管理器
  2. 单击应用程序池
  3. 选择您正在使用的任何应用程序池
  4. 在右窗格中,单击高级设置...

  5. 将启用 32 位应用程序设置为 True

    高级设置 启用 32 位

于 2013-12-11T17:00:50.310 回答
165

我刚刚在 Visual Studio 2015 中运行 IIS Express 时收到此错误消息。在我的情况下,我需要运行 64 位版本的 IIS Express:

工具 → 选项 → 项目和解决方案 → Web 项目
选中“为网站和项目使用 64 位版本的 IIS Express”复选框。

截屏:

Web 项目的 VS 选项的屏幕截图。

于 2016-06-06T20:09:37.820 回答
37

我有同样的问题。我已将项目 A 的“平台目标”(“项目 A”(右键单击)-> 属性-> 构建->“平台目标”)设置为 x86,但将项目 B 保持在“任何 CPU”。将项目 B 设置为“x86”解决了这个问题。

于 2013-04-18T16:23:37.090 回答
22

我在 Visual Studio 2015 中运行单元测试(xunit)时遇到了这个问题,并遇到了以下修复:

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64
于 2017-01-30T22:01:47.467 回答
9

如果您的项目中至少有 1 个 32 位 dll\exe,您可能需要在 IIS7 中将应用程序池设置“启用 32 位应用程序”更改为 TRUE。

于 2013-12-06T16:31:06.657 回答
7

首先,我在 VS2017 中通过一个旧项目得到了这个,我需要对所有项目进行微小的更改并将所有项目升级到框架 4.7。


其他几个人提到选择Any CPU可以解决这个问题。

您需要在几个地方执行此操作,而且可能不仅仅是从下拉列表中选择那么简单。这为我修复了它:

1)你需要在这里做这两个:

在此处输入图像描述

2)还有Configuration Manager(右键单击解决方案)

在此处输入图像描述

但是,如果它不存在呢???

然后单击New并选择这些设置:(感谢@RckLN

在此处输入图像描述

于 2018-03-02T06:18:02.623 回答
4

以下为我解决了这个问题,取消选中 'Prefer 32-bit' : 在此处输入图像描述

于 2020-01-02T11:37:41.660 回答
3

我在同一个解决方案中的多个项目中遇到了同样的问题,我最终将所有目标框架设置为目标 CPU 的 .NET Framework 4 和 x86,并最终成功编译。

于 2013-08-07T01:24:37.470 回答
3

这些解决方案都不适合我——但是通过删除 bin 和 obj 文件夹的内容,一切都变得很酷了。

于 2017-06-29T04:55:08.183 回答
3

Visual Studio Build我在通过 Visual Studio Online (VSTS) Build using Steps构建项目时得到了这个。

解决方案是:

  • 删除现有的源文件夹
  • 在平台中为所有 Visual Studio 构建(包括依赖项)显式设置“任何 CPU”(参见下面的屏幕截图)。
  • 重新运行构建

VSO 截图

于 2017-09-15T10:50:04.260 回答
3

Chilkat .NET 4.5 程序集要求在运行应用程序的任何计算机上安装 VC++ 2012 或 2013 运行时。大多数计算机已经安装了它。您的开发计算机将拥有它,因为已经安装了 Visual Studio。但是,如果部署到所需的 VC++ 运行时不可用的计算机上,则会出现上述错误:

安装所有的波纹管包

适用于 Visual Studio 2013 的 Visual C++ 可再发行包 - vcredist_x64

适用于 Visual Studio 2013 的 Visual C++ 可再发行包 - vcredist_x86

适用于 Visual Studio 2012 的 Visual C++ 可再发行包 - vcredist_x64

适用于 Visual Studio 2012 的 Visual C++ 可再发行包 - vcredist_x86

于 2017-12-11T10:43:44.610 回答
2

如果您尝试在 VS 中使用 MSI 安装程序打包 64 位项目,您也可能会看到此问题。(“原因是与 .msi 文件一起打包的本机 shim 是 32 位可执行文件。”)

有关更多详细信息,请参见此处:http: //blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx

于 2015-10-14T16:31:40.537 回答
2

对于较新版本的visual studio(此答案为v16.10),可以通过手动更改解决方案平台来修复。对我来说,它在从“任何 CPU”更改为“x86”后工作。

  1. 单击解决方案平台下拉列表,其中任何 CPU 都出现在下图中。 在此处输入图像描述

  2. 转到配置管理器。

    在此处输入图像描述

  3. 单击新建并根据适合您的方式添加平台 x86 或 x64(32 或 64 位)。 在此处输入图像描述

  4. 重新启动项目。

于 2021-06-01T17:57:17.537 回答
2

我也有这个问题。如前所述,该问题与 32 位/64 位冲突有关,但与托管在 Azure 中的站点有关。若要更改 Azure 应用服务中的平台,请转到配置 -> 常规设置。 在此处输入图像描述

于 2021-11-09T10:22:01.717 回答
1

我遇到了同样的问题。它突然出现,这对我来说似乎很奇怪。

在异常快照中,对于 FusionLog,我在其消息中看到以下内容:

... C:\Windows\Microsoft.NET\Framework64 ...

有关融合日志的更多信息:http: //msdn.microsoft.com/en-us/library/e74a18c4 (v=vs.110).aspx

所有项目的目标 CPU 为 AnyCPU。我将应用程序项目(引用所有其他项目的项目)更改为 x86 的目标 CPU。现在可以了。

不确定目标 CPU 是如何无缘无故发生混淆的,但确实如此。

于 2013-11-08T15:41:47.243 回答
1

我在一个项目中也遇到过这个问题,几分钟后我找到了解决方案,这个问题是由于 CPU 配置造成的,如果您使用的是Visual Studio 2010 或 VS 2013,只需转到项目的属性,然后从侧栏选择编译并且将有 5 个下拉菜单,第 5 个下拉菜单将是Target CPU:,您应该根据您的要求将其设置为x86 或 x64 ,而不是 Any CPU。

将其更改为x86后,我的问题得到了解决。

于 2015-09-11T10:12:14.527 回答
1

这也可以通过在app.config文件中定义多个受支持的框架并强制应用程序在与 app.config 文件中第一次提到的框架不同的 .NET 框架中运行来实现。

当您的系统中同时拥有上述两个框架时,这也会触发。

作为一种解决方法,在 app.config 中调出您将用于调试的目标框架

例如:如果您尝试在 .NET 4 中运行,配置文件应该有类似的内容,

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
于 2016-08-30T10:18:38.093 回答
1

在我的 C# 项目中,项目属性->[Build]->Platform target: Any CPU,并取消选中 Prefer 32-bit 以让编译器自动选择。

于 2017-01-03T01:58:16.063 回答
1

我在 Visual Studio 2017 上使用 ReSharper 运行单元测试时也遇到了这个问题,并使用以下配置修复了它:

在此处输入图像描述

您还可以更改 ReSharper 的运行测试设置: https ://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration

于 2018-01-31T05:32:25.893 回答
1

射击!我知道这个问题。我以为我做的一切都是正确的,直到我不小心在 VS 输出窗口中看到了“x86”,这就是我找到原因的时候。今天浪费了几分钟。

“发布”窗口下的配置设置为“x86”;而在其他任何地方,它都是“x64”。

请确保它在配置管理器、发布设置、解决方案配置和 IIS 设置(如果那是您的 Web 服务器)之间保持同步。

另外,请记住 - VS 是 32 位应用程序,而 IIS 是 64 位。IIS 中默认禁用 32 位应用程序。

在此处输入图像描述

于 2019-03-18T03:37:44.077 回答
0

这可能有点好笑,但我在正常工作代码中遇到了同样的问题。我添加了 StreamWriter 和 StreamReader,它给出了那个错误。解决方案是我将该代码放入注释括号中,然后进行调试,它又开始工作了

于 2015-10-21T18:55:12.763 回答
0

如果您像我一样通过 cli .net 集成从您的程序中使用 LibreOffice,我会遇到同样的错误。我在我的 PC 上的生产环境中使用旧版本的 LibreOffice 我安装了一个有冲突的新版本。只需卸载 LibreOffice。我在这里找到了解决方案.NET CLI:无法加载文件或程序集 'cli_cppuhelper'

于 2018-04-17T08:55:53.830 回答
0

在我的情况下,引发此异常的 dll 中缺少依赖项。我检查了 Dependency Walker,添加了丢失的 dll 并解决了问题。

更具体地说,我不小心添加了 SVN 关键字,以某种方式损坏了我的 opencv_core340.dll,因此我的 dll 无法再使用它。但是我不相信这个问题的解决方案取决于 dll 是否损坏或丢失。我只是为了提供完整的信息而添加它。

于 2018-10-31T16:22:12.943 回答
0

我检测到与其他答案不同的东西。在我的项目中遇到此异常是编译损坏的结果。没有做任何改变,只是强制重建,它是固定的。

于 2020-01-30T08:27:04.067 回答
0

我遇到过同样的问题。就我而言,项目 B 是一个 .Net Core 类库,它安装了 Nuget“Microsoft.Management.Infrastructure”。错误是我将我的项目 B 称为“MI”。我将项目名称更改为其他名称,突然一切都恢复了。

于 2020-03-24T10:08:37.020 回答
-1

您是否尝试从 cmd 运行 .exe 文件?这是我的错误。只需双击运行 .exe 文件即可。如果它是适用于 Windows 8.1/Windows Server 2012 R2 x64 的 .NET Core SCD。

于 2018-03-27T07:29:16.803 回答
-1

在我的情况下,错误是System.BadImageFormatException: Could not load file or assembly 'vjslib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。

通过从这里安装 vjredist 64 解决了这个问题。

于 2020-07-28T03:21:12.130 回答
-2

我的机器向我显示了 BIOS 更新,我想知道这是否与突然弹出此错误有关。在我进行更新后,错误得到解决并且解决方案构建良好。

于 2017-01-31T19:45:21.713 回答