27

私は Vista 64 ビットを使用しており、x86 構成でビルドされたプロジェクトがあります。すべて正常に動作します。今、私たちはテストを作成する時です。NUnit 2.4.8 がありますが、多くの問題があります。

テストは、.dll を直接選択すると Nunit.exe (gui) を介して読み込まれますが、実行すると system.badimageformatexception が発生します。

nunit.exe.config に関するいくつかのトリックを Google で検索して読みましたが、どれも機能しません。(UTF8に変更...起動用の.netバージョンのコメントを外します)。

何か案が?

アップデート

ソリューションをクリーンアップし、すべての BIN フォルダーを消去しました。コンパイルすると、x64 にあった古い /debug/ ではなく、bin ディレクトリに /x86/ しかないことがはっきりとわかります。

Nunit を使用すると、(ロード中に) 例外があります: System.IO.FileNotFoundException...

サーバー スタック トレース: System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& NUnit.Core.Builders.TestAssemblyBuilder.Load (文字列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 パッケージ) の 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) でBuild(TestPackage パッケージ) at NUnit.Core.SimpleTestRunner.Load(TestPackage パッケージ) at NUnit.Core.ProxyTestRunner.Load(TestPackage パッケージ) at NUnit.Core.ProxyTestRunner.Load(TestPackage パッケージ) at NUnit.Core.RemoteTestRunner.Load( TestPackage パッケージ) の System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink. SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)Build(TestPackage パッケージ) at NUnit.Core.SimpleTestRunner.Load(TestPackage パッケージ) at NUnit.Core.ProxyTestRunner.Load(TestPackage パッケージ) at NUnit.Core.ProxyTestRunner.Load(TestPackage パッケージ) at NUnit.Core.RemoteTestRunner.Load( TestPackage パッケージ) の System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink. SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)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) )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] で例外が再スローされました。 NUnit.Util.TestDomain.Load(TestPackage パッケージ) の NUnit.Util.TestLoader.LoadTest(String testName) の TestRunner.Load(TestPackage パッケージ)

更新 2

x64 ではなく x86 に変更した任意の CPU でコンパイルしています。理由はデバッグのためです。これについては、前のリンクですでに説明されています。NUnit が 64 ビット mod と Corflags.exe で実行されていることを確認する必要があります。

4

6 に答える 6

52

このウェブサイトで解決策を見つけました。\NUnit-2.4.8\bin\nunit.exe の代わりに \NUnit-2.4.8\bin\nunit-x86.exe を使用する必要があります... \bin\ に 2 つの nunit があることを知りませんでした!! !

ありがとう

于 2008-10-16T16:36:57.487 に答える
5

NUnit ホストは 64 ビット プロセスとして実行されている可能性があります (タスク マネージャーで確認できます)。アセンブリが x86 のみの場合、そのプロセスでは実行できません。

/32bit+ フラグを使用して、NUnit 実行可能ファイルでcorflagsを実行して、強制的に x86 を実行することができます。

于 2008-10-16T15:35:14.397 に答える
4

これは、MSBuild 実行プラットフォームが x86 に設定されているx64ビルド サーバーでTeamCity 3.1 から 4.0 にアップグレードするときにも発生する可能性があります。TeamCity ランナーは、ビルドが x86 を実行しているという事実を尊重せず、4.0 では 3.1 とは異なる方法でプラットフォームをデフォルト設定しているようです。

私の場合、最初に機能した修正は、MSBuild スクリプトの NUnit 呼び出しにプラットフォーム オーバーライドを追加することでした。

<NUnit Assemblies="Test/bin/$(プラットフォーム)/$(構成)/Test.dll" Platform="x86" />

(つまり、他の提案のように 32 ビットを強制する TeamCity テストランナーの方法)

(これには、テスト アセンブリのプラットフォーム ターゲットが任意の CPU の場合も含まれます (ただし、一部のテストでは x86 に制約されている DLL を動的にロードするため、明示的に x86 に設定しています))。

于 2008-12-03T16:26:48.127 に答える
0

TeamCity を使用している場合は、値がx86のteamcity.dotnet.nant.nunit2.platformプロパティを、TeamCity プロジェクトの構成設定 ([プロパティと環境変数] セクション) の [ビルド パラメーター] に追加できます。

于 2011-05-27T11:40:30.690 に答える
0

Any CPU ではなく x86 構成を使用しているのはなぜですか?

NUnitをロードすると、Any CPUオプションでビルドされているので、x64コードにJITすると思います。これが x86 として実行するように特別にコンパイルされたテストをロードしようとすると、例外がスローされます。

すべての構成設定を任意の CPU に変更して、問題が解決するかどうかを確認します。

于 2008-10-16T15:36:20.260 に答える
0

TeamCity 8.1 でも同じ問題がありました。それを解決したのは、NUnitビルドステップ.NETランタイム/プラットフォームx86に変更することでした

Run tests from: path をTestProject\bin\ReleaseからTestProject\bin\x86\Releaseに変更する必要もありました

于 2014-06-02T11:40:51.187 に答える