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.
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
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
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