由NUnit项目引起的System.BadImageFormatException

时间:2012-03-26 15:36: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'或者one   它的依赖关系。尝试加载带有的程序   格式不正确   文件名:   “Spin.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,Boolean autoSuites)        at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName,String testName,Boolean autoSuites)        在NUnit.Core.TestSuiteBuilder.BuildSingleAssembly(TestPackage包)        在NUnit.Core.TestSuiteBuilder.Build(TestPackage包)        在NUnit.Core.SimpleTestRunner.Load(TestPackage包)        在NUnit.Core.ProxyTestRunner.Load(TestPackage包)        在NUnit.Core.ProxyTestRunner.Load(TestPackage包)        在NUnit.Core.RemoteTestRunner.Load(TestPackage包)        在System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr   md,Object [] args,Object server,Int32 methodPtr,Boolean   fExecuteInContext,Object []& outArgs)        在System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage   msg,Int32 methodPtr,Boolean fExecuteInContext)

     

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

     

警告:装配绑定日志记录已关闭。要启用程序集绑定失败日志记录,请设置注册表值   [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)为1.注意:有   与程序集绑定失败相关的一些性能损失   日志记录。要关闭此功能,请删除注册表值   [HKLM \ SOFTWARE \微软\融合!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的构建,现在逐渐重新提交文件。我将报告这是怎么回事。不幸的是,尝试让这个问题涉及到几个脑袋无济于事。遗憾!

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

9 个答案:

答案 0 :(得分:53)

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

值得注意的是,配置管理器的平台字段可以"谎言"对您而言,实际上并不需要反映项目的属性实际配置的内容。我的配置管理员说" Common.dll"正在构建为"任何CPU",但项目属性(真正重要的设置)是将其构建为" x86"。

enter image description here

答案 1 :(得分:9)

所有答案的次要补充。您可能需要更改NUnit运行程序平台(对我来说是Resharper),就像我的情况一样。 见例子 enter image description here

答案 2 :(得分:6)

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

此外,如果你有从FW 3到FW 4的兆字节,它们有不同的运行时间(CLR不同)。

答案 3 :(得分:6)

确保此设置正确无误:测试菜单 - >测试设置 - >默认处理器架构 - > x64 / x86 。 在我的情况下这是不正确的,并且在同样的问题上失败了。

答案 4 :(得分:3)

这可能听起来很愚蠢,但是,请检查您的项目和处理器架构。在我的情况下,我在我认为是64位计算机(因为它正在构建64位项目)上运行64位测试。

猜猜是什么?它实际上是一台32位机器。所以NUnit.exe以32位(显然)运行,无法理解64位测试。

解决方案?构建测试的x86和x64版本,并在x86计算机上运行x86,在x64计算机上运行x64。

显而易见的。但值得一试。

答案 5 :(得分:3)

对我来说,异常是由nunit的无效/process=single参数引起的。如果我更改了值,则异常消失:

/process=separate

/process=multiple

p / s:迟到的答案,但仅供参考..

答案 6 :(得分:2)

我的情况有点不同。运行已修改的单元测试后,错误似乎很随机。

我删除了测试,错误消失了。

我重新创建了测试,错误又回来了。

我重命名了测试,错误就消失了。

我将测试重新命名,问题再没有发生。

希望这有帮助!

答案 7 :(得分:1)

感谢Ashes999唤醒我。

此问题确实再次发生。回滚和上传没有用。它原来是一个我们甚至不再使用的监视器对象。注释并修复。

找到这个的方法是通过调试所有单元测试。修复它暂停的任何地方。如果t没有暂停,那么错误。

答案 8 :(得分:1)

对于仍然遇到此问题的任何人,您还可能需要在测试运行器上设置框架字段以匹配所包含项目中的框架字段(该字段位于AlexM引用的字段右侧)。

就我而言,我正在为Windows Phone 8库编写测试套件,NUnit无法正确找出应该使用的框架版本。