使用 NUnit 在 64 位 Windows 上测试 32 位程序集
我正在使用 C# 和 .NET 4.0 来构建我当前的应用程序。对于单元测试,我使用最新版本的 NUnit 。
在我的应用程序中,我必须使用 32 位 DLL,因此我必须创建目标为“x86”的程序集。
应用程序本身在 32 位和 64 位 Windows 下都可以正常工作,但我无法使用 NUnit,因为在加载“x86”程序集时出现以下异常:
在“设置”->“程序集隔离”中,我使用“运行测试”每个程序集都有单独的进程',但没有用。
System.BadImageFormatException...
Server stack trace:
bei System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
bei System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
bei System.Reflection.Assembly.Load(AssemblyName assemblyRef)
bei NUnit.Core.Builders.TestAssemblyBuilder.Load(String path)
bei NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, Boolean autoSuites)
bei NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, String testName, Boolean autoSuites)
bei NUnit.Core.TestSuiteBuilder.BuildSingleAssembly(TestPackage package)
bei NUnit.Core.TestSuiteBuilder.Build(TestPackage package)
bei NUnit.Core.SimpleTestRunner.Load(TestPackage package)
bei NUnit.Core.ProxyTestRunner.Load(TestPackage package)
bei NUnit.Core.ProxyTestRunner.Load(TestPackage package)
bei NUnit.Core.RemoteTestRunner.Load(TestPackage package)
bei System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
bei System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
Exception rethrown at [0]:
bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
bei NUnit.Core.TestRunner.Load(TestPackage package)
bei NUnit.Util.TestDomain.Load(TestPackage package)
bei NUnit.Core.ProxyTestRunner.Load(TestPackage package)
bei NUnit.Util.RemoteTestAgent.AgentRunner.Load(TestPackage package)
bei System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
bei System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
Exception rethrown at [1]:
bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
bei NUnit.Core.TestRunner.Load(TestPackage package)
bei NUnit.Core.ProxyTestRunner.Load(TestPackage package)
bei NUnit.Util.ProcessRunner.Load(TestPackage package)
bei NUnit.Util.AggregatingTestRunner.Load(TestPackage package)
bei NUnit.Util.TestLoader.LoadTest(String testName)
如何让这些测试在 64 位版本的 Windows 上运行?
I'm using C# and .NET 4.0 to build my current application. For unit testing I use NUnit in its latest version.
In my application I have to make use of a 32-bit DLL, and therefore I have to create the assembly with target 'x86'.
The application itself works fine under both 32-bit and 64-bit Windows, but I can't use NUnit as I get the following exception upon loading the 'x86' assembly:
In Settings->Assembly Isolation I use 'Run tests in separate process per Assembly', but to no use.
System.BadImageFormatException...
Server stack trace:
bei System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
bei System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
bei System.Reflection.Assembly.Load(AssemblyName assemblyRef)
bei NUnit.Core.Builders.TestAssemblyBuilder.Load(String path)
bei NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, Boolean autoSuites)
bei NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, String testName, Boolean autoSuites)
bei NUnit.Core.TestSuiteBuilder.BuildSingleAssembly(TestPackage package)
bei NUnit.Core.TestSuiteBuilder.Build(TestPackage package)
bei NUnit.Core.SimpleTestRunner.Load(TestPackage package)
bei NUnit.Core.ProxyTestRunner.Load(TestPackage package)
bei NUnit.Core.ProxyTestRunner.Load(TestPackage package)
bei NUnit.Core.RemoteTestRunner.Load(TestPackage package)
bei System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
bei System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
Exception rethrown at [0]:
bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
bei NUnit.Core.TestRunner.Load(TestPackage package)
bei NUnit.Util.TestDomain.Load(TestPackage package)
bei NUnit.Core.ProxyTestRunner.Load(TestPackage package)
bei NUnit.Util.RemoteTestAgent.AgentRunner.Load(TestPackage package)
bei System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
bei System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
Exception rethrown at [1]:
bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
bei NUnit.Core.TestRunner.Load(TestPackage package)
bei NUnit.Core.ProxyTestRunner.Load(TestPackage package)
bei NUnit.Util.ProcessRunner.Load(TestPackage package)
bei NUnit.Util.AggregatingTestRunner.Load(TestPackage package)
bei NUnit.Util.TestLoader.LoadTest(String testName)
How to get those tests running on a 64-bit version of Windows?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如何调查测试程序集拒绝在 NUnit 中加载的过程? 中回答了该问题。 (参考 Ian Ringrose 对这个问题的评论。)
The question is answered in How do I investigate the course of a test's assembly refusing to load in NUnit?. (Ref Ian Ringrose's comment to the question.)