我有两个项目,项目a和项目b。projecb是一个控制台应用程序,它依赖于ProjectA。昨天,一切都很好,但今天突然当我运行ProjectB时,我得到了这个:

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

两者都只是常规项目,不依赖于任何其他非。网络项目。两者都是完全的。net -没有本机代码,也没有P/Invoke。我有其他项目依赖于ProjectA,仍然工作得很好。

我尝试过的事情:

Make sure both projects are set to "Any CPU," with the build checkbox checked. They are. Make sure both projects are for the same Target Framework (.Net 4.0 Client Profile). Under ProjectB --> References --> ProjectA --> Properties, make sure "Copy Local" is set to "True" _ (I verified that ProjectA.dll is being copied correctly) Clean/Rebuild the solution. I even tried manually deleting the /bin and /obj folders in both projects. Restart Visual Studio. Restart my computer. Check out an entirely new copy of the repository.

但还是得到相同的错误。我不知道我做了什么导致了这一切,也不知道该怎么补救。什么好主意吗?


当前回答

这也可以通过在app.config文件中定义多个受支持的框架来实现,并强制应用程序在不同的. net框架中运行,而不是在app.config文件中首先提到的框架。

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

作为一种变通方法,在app.config中调出用于调试的目标框架

如果你试图在。net 4中运行,配置文件应该有类似这样的东西,

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>

其他回答

开枪!我知道这个问题。我以为我做的一切都是对的,直到我不小心在VS输出窗口中看到'x86',那是我抓住原因的时候。今天在这上面浪费了几分钟。

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

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

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

在我的例子中,抛出这个异常的dll中缺少一个依赖项。我检查了依赖步行者,添加了丢失的dll,问题解决了。

更具体地说,我不小心将SVN关键字添加到opencv_core340.dll中,从而损坏了我的opencv_core340.dll,因此我的dll不能再使用它。然而,我不相信这个问题的解决方案取决于dll是否损坏或丢失。我添加这个只是为了给出完整的信息。

可能是你的网站部署到服务器后遇到的问题。

然后将应用程序池调整为启用32位应用程序。

步骤

打开IIS管理器 单击应用程序池 选择您正在使用的任何应用程序池 从右侧窗格,单击高级设置… “启用32位应用程序”设置为“True”

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

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

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64