Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果使用x86构建,Nunit.exe无法在Vista 64位上工作_C#_.net_.net 2.0_Nunit_64 Bit - Fatal编程技术网

C# 如果使用x86构建,Nunit.exe无法在Vista 64位上工作

C# 如果使用x86构建,Nunit.exe无法在Vista 64位上工作,c#,.net,.net-2.0,nunit,64-bit,C#,.net,.net 2.0,Nunit,64 Bit,我使用Vista 64位,我有一个使用x86配置构建的项目。一切正常。现在,我们正在创建测试。我们有NUnit2.4.8,但我们有很多问题 当我们直接选择.dll时,测试通过Nunit.exe(gui)加载,但当执行时,我们有一个system.badimageformatexception 我在谷歌上搜索了一些关于nunit.exe.config的技巧,但没有一个奏效。(更改为UTF8…取消.net版本的启动注释) 有什么想法吗 更新 我已清理解决方案并清除所有BIN文件夹。现在,当我编译时,我

我使用Vista 64位,我有一个使用x86配置构建的项目。一切正常。现在,我们正在创建测试。我们有NUnit2.4.8,但我们有很多问题

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

我在谷歌上搜索了一些关于nunit.exe.config的技巧,但没有一个奏效。(更改为UTF8…取消.net版本的启动注释)

有什么想法吗

更新

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

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

服务器堆栈跟踪: 在System.Reflection.Assembly.\n加载(AssemblyName文件名、字符串代码基、证据assemblySecurity、AssemblyLocationHint、StackScrawlMark和stackMark、Boolean throwOnFileNotFound、Boolean for Inspection) 在System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,证据assemblySecurity,StackScrawMark&stackMark,布尔值用于内省) 在System.Reflection.Assembly.InternalLoad(字符串assemblyString、证据assemblySecurity、StackScrawMark和stackMark,用于内省的布尔值) 在System.Reflection.Assembly.Load处(字符串assemblyString) 在NUnit.Core.Builders.TestAssemblyBuilder.Load(字符串路径)处 位于NUnit.Core.Builders.TestAssemblyBuilder.Build(字符串assemblyName,布尔自动套件) 在NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName、String testName、Boolean AutoSuite) 在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.\u PrivateProcessMessage(IntPtr md、对象[]参数、对象服务器、Int32 methodPtr、布尔fExecuteInContext、对象[]和outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg、Int32 methodPtr、Boolean fExecuteInContext)

在[0]处重试异常: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) at System.Runtime.Remoting.proxy.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型) 在NUnit.Core.TestRunner.Load(TestPackage)处 在NUnit.Util.TestDomain.Load(TestPackage)处 位于NUnit.Util.TestLoader.LoadTest(字符串testName)

更新2


我正在使用我修改为x86而不是x64的任何CPU进行编译。原因就是,。这已经在前面的链接中讨论过。我必须确认NUnit是以64位mod和Corflags.exe运行的,NUnit主机可能是以64位进程运行的(您可以通过查看任务管理器来确认)。如果您的程序集仅为x86,则它将无法在该进程中运行


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

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

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


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

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


Thx all

在MSBuild运行平台设置为x86的x64生成服务器上从TeamCity 3.1升级到4.0时,也可能发生这种情况。TeamCity runner似乎在4.0和3.1中对平台的默认设置有所不同,并不尊重构建运行x86的事实

在我的例子中,第一个有效的修复方法是在我的MSBuild脚本中向NUnit调用添加平台覆盖:

<NUnit Assemblies="Test/bin/$(Platform)/$(Configuration)/Test.dll" Platform="x86" /> <NUnit Assemblies=“Test/bin/$(Platform)/$(Configuration)/Test.dll”Platform=“x86”/> (即TeamCity test runner与其他建议一样强制使用32位的方式)


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

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

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


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

您是对的,我没有看到Nunit.exe后面的*32。我会检查你的链接,然后再给你回复+给我一个提示!不起作用。我尝试了另一个文件,它的工作。但事实并非如此。我有错误CF001:无法打开文件进行写入。该文件不是只读的…任何Cpu都已更改为X86。我在任何Cpu上运行。。。不在x64上,因为我无法在x64上调试断点和编辑。我不是网站的所有者。但是,至少,我已经写出了答案:)所以这并不重要。nunit-x86.exe是为在64位系统上测试32位应用程序而构建的。请参见此处的详细说明: