xunitビルドの場合、Nunit.exeはVista 64ビットで動作しません
質問
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)で NUnit.Core.Builders.TestAssemblyBuilder.Load(String path)で NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName、Boolean autoSuites)で NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName、String testName、Boolean autoSuites)で NUnit.Core.TestSuiteBuilder.BuildSingleAssembly(TestPackageパッケージ) NUnit.Core.TestSuiteBuilder.Build(TestPackage package)で NUnit.Core.SimpleTestRunner.Load(TestPackage package)で NUnit.Core.ProxyTestRunner.Load(TestPackage package)で NUnit.Core.ProxyTestRunner.Load(TestPackage package)で NUnit.Core.RemoteTestRunner.Load(TestPackage package)で 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 package)で NUnit.Util.TestDomain.Load(TestPackage package)で NUnit.Util.TestLoader.LoadTest(String testName)
で更新2
私はx64ではなくx86に変更したCPUでコンパイルしています。その理由は、デバッグのためです。これについては、前のリンクですでに説明しました。 NUnitが64ビットmodとCorflags.exeで実行されていることを確認する必要があります
解決
OK ウェブサイト。 \ NUnit-2.4.8 \ bin \ nunit.exeの代わりに\ NUnit-2.4.8 \ bin \ nunit-x86.exeを使用する必要があります... \ bin \に2 nunitがあることを知りませんでした!! !
Thx all
他のヒント
NUnitホストは64ビットプロセスとして実行されている可能性があります(タスクマネージャーで確認することで確認できます)。アセンブリがx86のみの場合、そのプロセスで実行することはできません。
corflags を実行してみてください。 / 32bit +フラグを使用して、xUnitを強制的に実行するNUnit実行可能ファイル
これは、MSBuild Run Platformがx86に設定された x64 ビルドサーバーでTeamCity 3.1から4.0にアップグレードするときにも発生する可能性があります。 TeamCityランナーは、4.0では3.1とは異なる方法でプラットフォームをデフォルト設定しているようです。ビルドがx86を実行しているという事実を尊重していません。
私の場合、最初に機能した修正は、MSBuildスクリプトのNUnit呼び出しにプラットフォームオーバーライドを追加することでした。
<NUnit Assemblies="Test/bin/$(Platform)/$(Configuration)/Test.dll" Platform="x86" />
(つまり、他の提案のように32ビットを強制するTeamCityテストランナーの方法)
(これには、テストアセンブリのプラットフォームターゲットが任意のCPUである場合が含まれます(ただし、一部のテストではx86に制約されているDLLを動的に読み込むため、x86に明示的に設定しました)。
なぜCPUではなくx86構成を使用しているのですか?
NUnitをロードすると、Any CPUオプションを使用してビルドされるため、x64コードへのJITが行われると思います。これが特にx86として実行するようにコンパイルされたテストをロードしようとすると、例外がスローされます。
すべての構成設定を任意のCPUに変更してみて、問題が解決するかどうかを確認します。
TeamCityを使用している場合、TeamCityプロジェクトの構成設定(プロパティと環境変数セクションで)。
TeamCity 8.1でも同じ問題が発生しました。それを解決したのは、NUnitビルドステップ .NETランタイム / プラットフォーム:を x86
に変更することでしたテストの実行:パスを TestProject \ bin \ Release から TestProject \ bin \ x86 \ Release に変更する必要もありました。 p>