【问题标题】:Nunit.exe cannot work on Vista 64bits if x86 build如果 x86 构建,Nunit.exe 无法在 Vista 64 位上运行
【发布时间】:2008-10-16 15:16:05
【问题描述】:

我使用的是 64 位 Vista,并且我有一个使用 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 文件名,字符串代码库,证据 assemblySecurity,程序集 locationHint,StackCrawlMark 和 stackMark,布尔 throwOnFileNotFound,布尔 forIntrospection) 在 System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,证据 assemblySecurity,StackCrawlMark 和 stackMark,Boolean for Introspection) 在 System.Reflection.Assembly.InternalLoad(字符串 assemblyString,证据 assemblySecurity,StackCrawlMark 和 stackMark,Boolean for Introspection) 在 System.Reflection.Assembly.Load(字符串 assemblyString) 在 NUnit.Core.Builders.TestAssemblyBuilder.Load(字符串路径) 在 NUnit.Core.Builders.TestAssemblyBuilder.Build(字符串 assemblyName,布尔 autoSuites) 在 NUnit.Core.Builders.TestAssemblyBuilder.Build(字符串 assemblyName,字符串 testName,布尔 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 类型) 在 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 中运行

【问题讨论】:

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


    【解决方案1】:

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

    谢谢大家

    【讨论】:

    • 我不是该网站的所有者。但是,至少,我已经写了答案:) 所以这并不重要。
    • nunit-x86.exe 是为在 64 位系统上测试 32 位应用程序而构建的。在此处查看详细说明:nunit.org/index.php?p=nunit-gui&r=2.4.2
    【解决方案2】:

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

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

    【讨论】:

    • 你说得对,我在 Nunit.exe 之后没有看到 *32。我会检查你的链接,并会回复你。 +1 提示!
    • 不起作用。我尝试了另一个文件,它可以工作。但努尼特没有。我有错误 CF001:无法打开文件进行写入。该文件不是只读的...
    【解决方案3】:

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

    在我的情况下,第一个有效的修复是在我的 MSBuild 脚本中向 NUnit 调用添加一个平台覆盖:

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

    (即,TeamCity 测试运行器在其他建议中强制使用 32 位的方式)

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

    【讨论】:

      【解决方案4】:

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

      我想当您加载 NUnit 时,它是使用 Any CPU 选项构建的,因此 JIT 可以转换为 x64 代码。当它尝试加载专门编译为以 x86 运行的测试时,它会引发异常。

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

      【讨论】:

      • ANY Cpu 已更改为 X86。我在任何 Cpu 上运行...而不是在 x64 上运行,因为我无法在 X64 上使用断点进行调试和编辑。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        TeamCity 8.1 也有同样的问题。解决它的方法是将 NUnit 构建步骤 .NET Runtime / Platform: 更改为 x86

        我还必须将 Run tests from: 路径从 TestProject\bin\Release 更改为 TestProject\bin\x86\Release

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多