我们正在 C#/.NET 项目中使用一些旧版 DLL。为什么无法捕获遗留代码上的某些异常并且应用程序崩溃?与标准 .NET 异常有何不同?
谢谢。
Jeffrey Ritcher 在其精彩的“通过 C# 的 CLR”中告诉我们:一些非托管代码故障被 .Net 运行时 (CLR) 视为“损坏的状态异常”(CSE)。通常(见下文),我们这些普通人无法捕捉到这些异常。在这些失败之一时,甚至finally
不会执行块,其中包括:
但是,您可以将HandleProcessCorruptedStateExceptionsAttribute和SecurityCriticalAttribute属性应用于您期望 CSE 发生的特定方法。在此方法中,您可以编写一个try...catch
将捕获 CSE 的块。
可以在本文中找到更多详细信息:http: //msdn.microsoft.com/en-us/magazine/dd419661.aspx