由NUnit项目引起的System.BadImageFormatException

Mat*_*nty 18 c# 64-bit nunit badimageformatexception

今天是个好日子.我整天都在工作中遇到同样的问题,并且正在努力找到任何新的路径.

当我的解决方案在服务器上构建时,我收到以下错误.我在解决方案中运行/调试所有测试没有问题,并且构建正常.服务器和我的电脑都是x64.我已经遵循了许多建议,但我发现这些建议都无济于事.

在所有配置下,我已将Platform Target设置为x86,用于我的解决方案中的所有项目.

我知道有一个nunit-console-x86.exe可能会有所不同,但我不知道在代码中指定这一点.

请注意我已经开始上网了,如果我错过了什么,请道歉.

System.BadImageFormatException:无法加载文件或程序集
"Spin.TradingServices.DataAcquisition.Test.NUnit,Version = 1.0.12103.2060,Culture = neutral,PublicKeyToken = null"或其依赖项之一.尝试加载格式不正确的程序.
文件名:'Spi​​n.TradingServices.DataAcquisition.Test.NUnit,Version = 1.0.12103.2060,Culture = neutral,PublicKeyToken = null'

服务器堆栈跟踪:System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)在System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,Evidence) assemblySecurity,StackCrawlMark&stackMark,Boolean forIntrospection,Boolean suppressSecurityChecks)在System.Reflection.Assembly.Load(AssemblyName assemblyRef)at NUnit.Core.Builders.TestAssemblyBuilder.Load(String path)at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName) ,NUnit.Core.Core.Tore上的NUnit.Core.ToreSuiteBuilder.TestSuiteBuilder(TestPackage包)的NUnit.Core.TestSuiteBuilder.BuildSingleAssembly(TestPackage包)中的NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName,String testName,Boolean autoSuites) NUnit.Core.Proxy的.Core.SimpleTestRunner.Load(TestPackage包)在System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md,Object []的NUnit.Core.moreTestRunner.Load(TestPackage包)的NUnit.Core.ProxyTestRunner.Load(TestPackage包)上的TestRunner.Load(TestPackage包) System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg,Int32 methodPtr,Boolean fExecuteInContext)中的args,Object server,Int32 methodPtr,Boolean fExecuteInContext,Object []和outArgs)

在[0]处重新抛出异常:位于NUnit.Core的System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)的System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg).位于NUnit.ConsoleRunner.Runner.Main(String [] args)的NUnit.ConsoleRunner.ConsoleUi.Execute(ConsoleOptions选项)的NUnit.Util.TestDomain.Load(TestPackage包)中的TestRunner.Load(TestPackage包)

警告:装配绑定日志记录已关闭.要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1.注意:程序集绑定失败日志记录会导致一些性能损失.要关闭此功能,请删除注册表值[HKLM\Software\Microsoft\Fusion!EnableLog].

http://app1017-build.oy.gb.sportingindex.com:8080/job/TradingServices.DataAcquisition-Dev/ws/DataAcquisition/build.proj(86,5):错误MSB6006:"nunit-console.exe"已退出代码-100.完成建筑项目"(默认目标) - 失败.

建立失败.

请注意:我们已经恢复了我们对Hudson的构建,现在逐渐重新提交文件.我将报告这是怎么回事.不幸的是,尝试让这个问题涉及到几个脑袋无济于事.耻辱!

更新 我暂时没有回到这个页面,但看起来有很多不同的解决方案.如果我能把它们全部标记为答案我会!那些你在这里找到自己的方式的人应该对每个选项给予同等的信任.

The*_*ter 56

我在X64 pc上使用控制台应用程序遇到此问题,构建设置为x86并且仍然崩溃.我在控制台应用程序上进入了属性,在构建下我将我的平台目标从x86更改为任何CPU然后突然所有测试都运行并成功运行.

值得注意的是,Configuration Manager的平台字段可以"撒谎",并且实际上不必反映项目的属性实际配置的内容.我的配置管理器说"Common.dll"被构建为"任何CPU",但项目属性(真正重要的设置)是将其构建为"x86".

在此输入图像描述

  • +1任何CPU更改为我修复它:) (2认同)

Ale*_*x M 9

所有答案的一个小的补充.您可能需要更改NUnit运行程序平台(对我来说是Resharper),就像我的情况一样.见例子 在此输入图像描述


ili*_*ili 7

检查程序集的目标框架版本与nUnit test runner支持的相同.有关支持的运行时列表,请参阅runFile.exe.config.

此外,如果你有从FW 3到FW 4的megrate,他们有不同的运行时间(CLR是不同的).


Mau*_*rGi 6

确保此设置正确:测试菜单 - >测试设置 - >默认处理器体系结构 - > x64/x86.在我的情况下这是不正确的,它失败了同样的问题.


And*_*ndy 5

当我针对Console或WPF应用程序进行测试时,我经常遇到这种情况.一些原因是

  • 首先,确保您的应用程序不在.Net Framework 3或4客户端配置文件上运行
  • 然后在应用程序和测试项目上比较目标框架.NET版本.它们应该是一样的
  • 在构建选项卡上检查平台目标.它们应该是一样的.例如,如果测试项目具有" 任何CPU "目标,则应用程序必须具有" 任何CPU ".