如果x86版本,Nunit.exe无法在Vista 64bits上运行

时间:2008-10-16 15:16:06

标签: c# .net .net-2.0 nunit 64-bit

我使用Vista 64位,我有一个使用x86配置构建的项目。一切正常。现在,我们正在创建测试。我们有NUnit 2.4.8,但是我们遇到了很多问题。

当我们直接选择.dll时,测试正在通过Nunit.exe(gui)加载,但在执行时我们有一个system.badimageformatexception。

我已经通过在Google上搜索关于nunit.exe.config的一些技巧来阅读但没有工作。 (更改为UTF8 ...取消注释启动的.net版本。)

有什么想法吗?

更新

我已经清理了解决方案并清除了所有BIN文件夹。现在当我编译时,我清楚地看到我在bin目录中只有/ x86 /而不是x64中的旧/ debug /。

当我使用Nunit时,我有一个例外(在加载中): System.IO.FileNotFoundException ...

服务器堆栈跟踪:    在System.Reflection.Assembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint,StackCrawlMark& stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection)    在System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark& stackMark,Boolean forIntrospection)    在System.Reflection.Assembly.InternalLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMark& stackMark,Boolean forIntrospection)    在System.Reflection.Assembly.Load(String assemblyString)    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 type)    在NUnit.Core.TestRunner.Load(TestPackage包)    在NUnit.Util.TestDomain.Load(TestPackage包)    在NUnit.Util.TestLoader.LoadTest(String testName)

更新2

我正在使用任何已编译为x86而不是x64的CPU进行编译。原因是debug。这已在前一个链接中讨论过。我必须确认NUnit运行在64位mod和Corflags.exe

6 个答案:

答案 0 :(得分:52)

好的,我在website找到了解决方案。你必须使用\ NUnit-2.4.8 \ bin \ nunit-x86.exe而不是\ NUnit-2.4.8 \ bin \ nunit.exe ...不知道\ bin \有2个nunit !! !

全部

答案 1 :(得分:5)

NUnit主机可能以64位进程运行(您可以通过查看任务管理器来确认)。如果程序集只是x86,则它将无法在该进程中运行。

您可以尝试在NUnit可执行文件上运行corflags以强制它运行x86,使用/ 32bit +标志

答案 2 :(得分:4)

x64 构建服务器上将TeamCity 3.1升级到4.0且MSBuild运行平台设置为x86时,也会发生这种情况。 TeamCity运行器似乎在4.0中以不同于3.1的方式默认平台,而不是承认构建运行x86这一事实。

就我而言,第一个有效的解决方案是在我的MSBuild脚本中为NUnit调用添加一个Platform覆盖:

<NUnit Assemblies="Test/bin/$(Platform)/$(Configuration)/Test.dll" Platform="x86" /> 

(即TeamCity测试运行方式强制32位,与其他建议一样)

(这包括测试程序集的平台目标是任何CPU的时候(尽管我发生了,因为有些测试会动态加载受x86限制的DLL,因此我将它们显式设置为x86)。

答案 3 :(得分:0)

为什么使用x86配置而不是任何CPU?

我想,当你加载NUnit时,它是用Any CPU选项构建的,所以JIT到x64代码。当它试图加载你专门编译为x86运行的测试时,会抛出异常。

我会尝试将所有配置设置更改为任何CPU,看看这是否能解决您的问题。

答案 4 :(得分:0)

如果使用TeamCity,您可以将属性 teamcity.dotnet.nant.nunit2.platform 的值 x86 添加到TeamCity项目配置设置中的Build Parameters(在“属性和环境变量”部分中。)

答案 5 :(得分:0)

与TeamCity 8.1有同样的问题。解决这个问题的方法是将NUnit构建步骤 .NET运行时 / 平台:更改为 x86

我还必须从 TestProject \ bin \ Release 更改运行测试路径到 TestProject \ bin \ x86 \ Release