質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top