20

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

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

在所有配置下,我已将解决方案中的所有项目的平台目标设置为 x86。

我知道有一个 nunit-console-x86.exe 可能会有所不同,但我不确定在代码中的何处指定它。

请意识到我已经开拓了互联网,如果我错过了什么,请道歉。

System.BadImageFormatException:无法加载文件或程序集
“Spin.TradingServices.DataAcquisition.Test.NUnit,版本=1.0.12103.2060,文化=中性,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。
文件名:“Spin.TradingServices.DataAcquisition.Test.NUnit,版本=1.0.12103.2060,文化=中性,PublicKeyToken=null”

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

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

警告:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值 [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 上的构建,现在更逐步地重新提交文件。我将报告情况如何。不幸的是,试图让一些人参与这个问题但无济于事。耻辱!

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

4

10 回答 10

60

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

值得注意的是,Configuration Manager 的平台字段可能对您“撒谎”,并且实际上不必反映项目的属性实际配置为做什么。我的配置经理说“Common.dll”被构建为“Any CPU”,但项目属性(真正重要的设置)将它构建为“x86”。

在此处输入图像描述

于 2012-04-11T15:03:10.807 回答
9

所有答案的一个小补充。您可能需要更改 NUnit 运行器平台(对我来说是 Resharper)本身,就像我的情况一样。查看示例 在此处输入图像描述

于 2014-07-29T11:10:44.457 回答
9

确保此设置正确:Test menu -> Test Settings -> Default Processor Architecture -> x64 / x86。在我的情况下这是不正确的,它因同样的问题而失败。

于 2015-04-07T00:14:41.870 回答
7

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

此外,如果您已从 FW 3 迁移到 FW 4,它们具有不同的运行时间(CLR 不同)。

于 2012-03-26T15:58:11.670 回答
5

当我针对控制台或 WPF 应用程序进行测试时,我经常遇到这种情况。几个原因是

  • 首先,确保您的应用程序没有在 .Net Framework 3 或 4 客户端配置文件上运行
  • 然后比较应用程序和测试项目的目标框架 .NET 版本。他们应该是一样的
  • 检查构建选项卡上的平台目标。他们应该是一样的。例如,如果测试项目具有“ Any CPU ”目标,则应用程序必须具有“ Any CPU ”。
于 2012-09-10T09:12:09.453 回答
4

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

/process=separate

或者

/process=multiple

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

于 2014-03-06T11:17:20.560 回答
3

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

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

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

明显的。但值得一试。

于 2012-05-03T18:16:09.077 回答
2

我的情况有点不同。运行已修改的单元测试后,该错误非常随机地出现。

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

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

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

我重命名了测试,问题没有再次发生。

希望这可以帮助!

于 2014-11-12T16:30:44.143 回答
1

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

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

于 2015-02-13T19:43:28.567 回答
1

感谢 Ashes999 叫醒我。

这个问题又回来了。并且回滚和上传不起作用。原来它是一个我们甚至不再使用的监视器对象。注释掉并修复。

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

于 2012-05-03T17:50:44.233 回答