我有一个混合的.NET和本机代码控制台应用程序。由于Visual C RunTime Library致命错误,应用程序进程终止。即使我使用以下内容,托管代码也不会捕获本机异常:
AppDomain.UnHandledExption += ...
RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true)
。我还能做什么?
答案 0 :(得分:21)
.NET 4中的本机异常已更改,因此无法使用标准catch块捕获它们。您必须将引发异常的函数标记为[HandleProcessCorruptedStateExceptions]
以便能够捕获它。
更多信息,http://msdn.microsoft.com/en-us/magazine/dd419661.aspx
请注意该文章中的注释,例如,如果您想要正常捕获它们而不是遵循执行finally块和退出的建议,请将legacyCorruptedStateExceptionsPolicy=true
添加到配置文件中。
答案 1 :(得分:-2)
Catch without()将捕获非CLS兼容的异常,包括本机异常。
try
{
}
catch
{
}