3

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

谢谢。

4

1 回答 1

1

Jeffrey Ritcher 在其精彩的“通过 C# 的 CLR”中告诉我们:一些非托管代码故障被 .Net 运行时 (CLR) 视为“损坏的状态异常”(CSE)。通常(见下文),我们这些普通人无法捕捉到这些异常。在这些失败之一时,甚至finally不会执行块,其中包括:

  • 访问冲突
  • 非法指令
  • 堆栈溢出
  • 页面错误

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

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

于 2012-07-16T15:22:14.303 回答