为什么我无法在.NET中捕获一些异常类型?

时间:2012-07-16 14:30:15

标签: .net dllimport

我们正在使用C#/ .NET项目中的一些遗留DLL。为什么遗留代码上的某些异常无法捕获且应用程序崩溃?是什么与标准.NET异常有所不同?

感谢。

1 个答案:

答案 0 :(得分:1)

Jeffrey Ritcher在其宏伟的“CLR via C#”中告诉我们:.Net运行时(CLR)将一些非托管代码故障视为“损坏状态异常”(CSE)。通常(见后文),这些例外不能被我们凡人抓住。即使finally块也不会在其中一个失败时执行,其中包括:

  • 访问违规行为
  • 非法指示
  • 堆栈溢出
  • 页面错误

但是,您可以将HandleProcessCorruptedStateExceptionsAttributeSecurityCriticalAttribute属性应用于您希望CSE发生的特定方法。在此方法中,您可以编写一个try...catch块来捕获CSE。

在本文中可以找到更详细的信息:http://msdn.microsoft.com/en-us/magazine/dd419661.aspx