Container.Verify有时会抛出System.ExecutionEngineException

时间:2016-06-30 22:34:08

标签: simple-injector

此问题仅在IISExpress中运行的基于WCF的Web api项目上本地发生。 它相当随机发生。

“SimpleInjector.dll中发生了'System.ExecutionEngineException'类型的未处理异常”

当我执行container.Verify()

时会发生这种情况

任何可能导致此问题的想法,或者如何调试它?

1 个答案:

答案 0 :(得分:3)

ExecutionEngineException通常由分析工具引起,例如:

  • Microsoft IntelliTrace
  • JetBrains dotTrace

但我看到这也是由微软的测试运行员(MSTest)引起的。

这些工具中的限制(或缺陷)导致它们无法应对动态程序集编译。动态汇编编译是Simple Injector用来优化性能的。

处理此问题的最有效方法(无需对您使用的分析或测试工具进行任何更改)是禁用Simple Injector的动态程序集编译,如下所示:

container.Options.EnableDynamicAssemblyCompilation = false;

这意味着Simple Injector将编译的代理将使用Lightweight Code Generation创建(稍微慢一些但不用担心),而不是创建新的内存中程序集。

另一种选择是禁用IntelliTrace或dotTrace等工具,但当然并不总是这样。对于MSTest,您还可以禁用其“保持测试执行引擎运行”功能。

  

旁注:旧的Codeplex网站上有一个old issue,用于描述问题和解决方案。不幸的是,由于Codeplex团队的许多错误,Googling无法找到这个问题,而且这个问题随着时间的推移已经变得难以理解。