2008-10-16 188 views
27

我在Vista 64位,并且我有一个使用x86配置构建的项目。一切正常。现在,我们正在创建测试。我们有NUnit 2.4.8,但是我们有很多问题。如果x86构建的Nunit.exe无法在Vista 64位上工作

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

我已经通过在Google上搜索关于nunit.exe.config的几个技巧,但没有工作。 (更改为UTF8 ... uncomment .net版本用于启动)。

有什么想法?

更新

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

当我和NUnit的去我(在加载)异常:System.IO.FileNotFoundException ...

服务器堆栈跟踪:在System.Reflection.Assembly._nLoad(的AssemblyName文件名 ,串的代码库,证据assemblySecurity,装配locationHint,StackCrawlMark & stackMark,布尔throwOnFileNotFound,布尔forIntrospection) 在System.Reflection.Assembly.InternalLoad(的AssemblyName assemblyRef,证据assemblySecurity,StackCrawlMark & stackMark,布尔forIntrospection) 在System.Reflection.Assembly。 InternalLoad(字符串assemblyStrin克,证据assemblySecurity,StackCrawlMark & stackMark,布尔forIntrospection) 在System.Reflection.Assembly.Load(字符串assemblyString) 在NUnit.Core.Builders.TestAssemblyBuilder.Load(字符串路径) 在NUnit.Core.Builders.TestAssemblyBuilder。建立(字符串的AssemblyName,布尔autoSuites) 在NUnit.Core.Builders.TestAssemblyBuilder.Build(字符串的AssemblyName,字符串测试名,布尔autoSuites) 在NUnit.Core.TestSuiteBuilder.BuildSingleAssembly(TestPackage封装) 在NUnit.Core.TestSuiteBuilder。 NUnit.Core.SimpleTestRunner.Load(TestPackage包) NUnit.Core.ProxyTestRunner.Load(TestPackage包) NUnit.Core.ProxyTestRunner.Load(Tes())构建(TestPackage包) tPackage包) at NUnit.Core.RemoteTestRunner.Load(TestPackage包) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md,Object [] args,Object server,Int32 methodPtr,Boolean fExecuteInContext,Object [] & outArgs) 在System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(即时聊天味精,的Int32 methodPtr,布尔fExecuteInContext)[0]时

异常重新抛出: 在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg,IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData & msgData,Int32 type) at NUnit.Core.Te stRunner.Load(TestPackage包) 在NUnit.Util.TestDomain.Load(TestPackage包) 处的NUnit.Util.TestLoader。负载测试(字符串测试名)

更新2

我与我已经修改是x86,而不是任何的x64 CPU编译。原因是为debug。这已经在前面的链接中讨论过了。我要确认NUnit的是64位模和Corflags.exe

回答

52

好吧,我发现在这website的解决方案。你必须使用\ NUnit的-2.4.8 \ BIN \ NUnit的-x86.exe程序,而不是\ NUnit的-2.4.8 \ BIN \ nunit.exe ......不知道的\ bin \有2 NUnit的! !

THX所有

5

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

您可以尝试在NUnit的可执行运行corflags,迫使它运行的x86,你为什么要使用的x86配置上并没有任何CPU使用/ 32位+标志

+0

你是对的,我没有看到Nunit.exe后的* 32。我会检查你的链接,并会回复给你。提示+1! – 2008-10-16 15:37:12

+0

不起作用。我试着在其他文件上运行。但是Nunit没有。我有错误CF001:无法打开文件进行写入。该文件不是只读的... – 2008-10-16 15:45:10

0

我想像,当你加载的NUnit它已经建成与任何CPU选项,这样即时编译到x64代码。当它试图加载专门编译为x86的测试时,它会抛出异常。

我想尝试改变你的所有配置设置的任何CPU,看看是否能解决您的问题。

+0

任何Cpu已被更改为X86。我在任何Cpu上运行...不在x64上,因为我无法在X64上使用断点和编辑进行调试。 – 2008-10-16 15:45:53

4

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

在我而言,这工作是增加一个平台覆盖到我的MSBuild脚本NUnit的调用的第一个补丁:

 
&ltNUnit Assemblies="Test/bin/$(Platform)/$(Configuration)/Test.dll" Platform="x86" />

(即,迫使32位中的其他的TeamCity的测试运行方式建议)

(这包括当测试程序集的平台目标是任何CPU时(虽然它发生时我已经将它们明确地设置为x86,因为一些测试动态加载了受限于x86的DLL))。

0

如果使用TeamCity的,你可以用值在你的TeamCity项目的配置设置生成的参数(在属性和环境变量部分)添加属性teamcity.dotnet.nant.nunit2.platform

0

与TeamCity 8.1有同样的问题。什么解决它正在改变NUnit的生成步骤。NET运行/平台:

我也必须从改变运行测试:路径从TestProject \ BIN \发布TestProject \ BIN \ 86 \释放

相关问题