2016-06-30 8 views
3

この問題はIISExpressで実行されているWCFベースのWeb APIプロジェクトではローカルでのみ発生します。 かなりランダムに発生します。 Container.Verify throw System.ExecutionEngineException

は、これは私がcontainer.Verifyを行うときに()

これが発生する可能性がありますどのような任意のアイデア、またはどのようにデバッグするために発生し

「型 『System.ExecutionEngineException』の未処理の例外はSimpleInjector.dllに発生しました」それ?

答えて

2

ExecutionEngineExceptionは、通常のようなツールプロファイリングによって引き起こされる:

  • マイクロソフトはIntelliTraceを
  • JetBrainsのドットトレース

しかし、私は、これはMicrosoftのテストランナー(MSTestを)などによって引き起こされて見てきましたよく

これらのツールの制限(または脆弱性)により、動的アセンブリのコンパイルに対処できなくなります。動的アセンブリのコンパイルは、Simple Injectorがパフォーマンスを最適化するために使用するものです。

(あなたが使用プロファイリングやテストツールには何も変更せずに)これに対処するための最も効果的な方法は、次のように単純なインジェクタの動的アセンブリのコンパイルを無効にすることです:これは、ことを意味

container.Options.EnableDynamicAssemblyCompilation = false; 

Simple Injectorがコンパイルするデリゲートは、新しいインメモリアセンブリを作成する代わりに、軽量コード生成(わずかに遅くなりますが、心配することはありません)を使用して作成されます。

別の方法として、IntelliTraceやdotTraceなどのツールを無効にすることもできますが、これは必ずしもオプションではありません。 MSTestの場合は、「実行テストエンジンを実行する」機能を無効にすることもできます。

サイドノート:問題と解決方法を説明する古いCodeplexサイトにold issueがあります。残念ながら、Codeplexチームの多くの間違いのため、この問題はGoogle検索では見つからず、問題は時間の経過とともに判読できなくなっています。

+0

ありがとうございました。私はそれを試みるつもりです。これはプロファイリングツールの下で "通常の" iisexpress起動時に実行されると、時々それを殺すように見えることはありません。それがうまくいけば、問題は、おそらく上記のオプションを私のプロダクションコードでは無効にしたくないということです(これは開発者だけがこれを見るようになります)。 – Ian1971

+0

ダイナミックコンパイルに関連しているようです。私はwindbgで分析することができました。それは検証中にEF DbContext関連のようです。 – Ian1971

+0

さらなるデバッグでは、それを引き起こす特定のタイプではないようです。一般的な要因は、再コンパイル後に発生するため、Webアプリケーションをシャットダウンすることが原因と考えられます。それは再コンパイル後に呼び出されたようです。だからおそらくIISExpressとは何かがまだ生きているが、アプリケーションは再起動されていますか? – Ian1971

関連する問題