我一直试图找出更多关于这个问题的信息,但我运气不佳。我一直在阅读,应用程序不应该出现这个错误,虽然这一切都很好,但它并没有告诉我什么会导致这个错误出现。
我知道这个问题非常广泛,因为我确信这个错误可能有多种原因,所以我会尽量缩小范围。
我正在使用 VS2003 开发使用 C++.NET 的应用程序
该应用程序主要使用非托管代码和少量托管代码(由于垃圾收集器的严重干扰)。所以我认为它 95% 非托管,5% 托管
我在某处读到不稳定/错误/不正确的非托管代码可能会弄乱部分 CLR 内存,使其损坏并引发此错误。
由于 95% 的应用程序是非托管的,我不知道从哪里开始寻找。也许在托管和非托管之间交互的少数类?将数据从托管数据编组到非托管数据呢?错误的空指针会导致此故障吗?还有哪些问题会导致这种情况?数组索引超出范围?空对象呢?
任何可以提供 System.ExecutionEngine 失败的可能原因列表的信息/论文/文章将不胜感激!
根据答案,此异常可能在多种情况下引起,在问题中提及它们以获得更好的可见性。
可能的原因/情况列表:
- C++ 和 C# 之间的参数不匹配
- 使用反射时
- WCF 服务尝试在此处返回IList 或 IEnumerable
- 使用分析工具
- 在汇编程序中使用 std 指令
- 多次调用 ::FreeLibrary()
- .NET 剪贴板调用
- 使用统一框架
- 使用错误的编组
- 使用
INotifyPropertyChanged
可能的解决方法/解决方案: