无法捕获托管代码中的本机异常

时间:2012-05-09 13:32:19

标签: c# .net exception-handling

我有一个混合的.NET和本机代码控制台应用程序。由于Visual C RunTime Library致命错误,应用程序进程终止。即使我使用以下内容,托管代码也不会捕获本机异常:

  1. 尝试/捕捉阻止
  2. AppDomain.UnHandledExption += ...
  3. 在AssmblyInfo文件中标记RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true)
  4. 我还能做什么?

2 个答案:

答案 0 :(得分:21)

.NET 4中的本机异常已更改,因此无法使用标准catch块捕获它们。您必须将引发异常的函数标记为[HandleProcessCorruptedStateExceptions]以便能够捕获它。

更多信息,http://msdn.microsoft.com/en-us/magazine/dd419661.aspx

请注意该文章中的注释,例如,如果您想要正常捕获它们而不是遵循执行finally块和退出的建议,请将legacyCorruptedState­­ExceptionsPolicy=true添加到配置文件中。

答案 1 :(得分:-2)

Catch without()将捕获非CLS兼容的异常,包括本机异常。

try
{

}
catch
{

}