使用 NUnit 在 64 位 Windows 上测试 32 位程序集

发布于 2024-10-05 08:46:56 字数 3173 浏览 3 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

×眷恋的温暖 2024-10-12 08:46:56

如何调查测试程序集拒绝在 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.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文