2016-06-30 15 views
3

Dieses Problem tritt lokal nur auf einem WCF-basierten Web-API-Projekt auf, das in IISExpress ausgeführt wird. Es passiert ziemlich zufällig.Container.Verify wirft System.ExecutionEngineException manchmal

„Eine nicht behandelte Ausnahme des Typs‚System.ExecutionEngineException‘aufgetreten in SimpleInjector.dll“

Dies geschieht, wenn ich container.Verify tun()

Irgendwelche Ideen, was dieses verursachen könnte, oder wie debuggen es?

Antwort

2

Die ExecutionEngineException ist in der Regel verursacht durch Werkzeuge Profilierungs wie:

  • Microsoft IntelliTrace
  • JetBrains dotTrace

Aber ich habe das von Microsofts Test Runner (MSTest) verursacht wurde gesehen, wie Gut.

Einschränkungen (oder Fehler) in diesen Tools verursachen, dass sie mit der dynamischen Assembly-Kompilierung nicht zurechtkommen. Dynamic Assembly Compilation ist, was Simple Injector verwendet, um die Leistung zu optimieren.

Der effektivste Weg, um damit umzugehen (ohne etwas auf die Profilierung oder Test-Tools ändern zu müssen, die Sie verwenden) ist einfach Injector dynamische Assembly Zusammenstellung wie folgt zu deaktivieren:

container.Options.EnableDynamicAssemblyCompilation = false; 

Das bedeutet, dass die Delegaten, die Simple Injector kompilieren wird, werden mit Lightweight Code Generation erstellt (etwas langsamer, aber Sie müssen sich keine Gedanken darüber machen), anstatt eine neue In-Memory-Assembly zu erstellen.

Eine andere Option ist das Deaktivieren von Tools wie IntelliTrace oder dotTrace, aber das ist natürlich nicht immer eine Option. Im Fall von MSTest können Sie auch die Funktion "Ausführung der Testausführungs-Engine beibehalten" deaktivieren.

Seitennotiz: Es gibt eine old issue auf der alten Codeplex-Website, die das Problem und die Lösung beschreibt. Aufgrund vieler Fehler des Codeplex-Teams kann dieses Problem leider nicht vom Google-Team gefunden werden, und das Problem ist mit der Zeit unlesbar geworden.

+0

Danke. Ich werde es versuchen. Dies geschieht nicht, wenn unter einem Profiling-Tool nur "normal" iisexpress startet manchmal scheint es zu töten. Wenn es funktioniert, dann wäre das Problem, dass ich wahrscheinlich nicht möchte, dass die obige Option in meinem Produktionscode deaktiviert wird (wie ich es immer nur im Entwickler sehe). – Ian1971

+0

Es scheint mit der dynamischen Kompilierung verwandt zu sein. Ich habe es geschafft, in windbg zu analysieren und es scheint, dass EF DbContext während der Verifizierung verwandt ist. – Ian1971

+0

Beim weiteren Debuggen scheint es kein bestimmter Typ zu sein, der das verursacht. Der gemeinsame Faktor scheint zu sein, dass er nach einer Neukompilierung auftritt, was wiederum die Web-App herunterfahren würde. Es scheint auf dem Anruf nach der Neukompilierung zu sein. Also möglicherweise etwas mit IISExpress noch am Leben, aber die Anwendung neu gestartet werden? – Ian1971