我有一个混合的 .NET 和本机代码控制台应用程序。应用程序进程因 Visual C 运行时库致命错误而终止。即使我使用以下内容,托管代码也不会捕获本机异常:
- 尝试/捕获块
AppDomain.UnHandledExption += ...
RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true)
在 AssmblyInfo 文件中标记。
我还可以做些什么?
我有一个混合的 .NET 和本机代码控制台应用程序。应用程序进程因 Visual C 运行时库致命错误而终止。即使我使用以下内容,托管代码也不会捕获本机异常:
AppDomain.UnHandledExption += ...
RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true)
在 AssmblyInfo 文件中标记。我还可以做些什么?
.NET 4 中的本机异常已更改,因此无法使用标准 catch 块捕获它们。您特别必须标记抛出异常的函数[HandleProcessCorruptedStateExceptions]
以便能够捕获它。
更多在这里, http: //msdn.microsoft.com/en-us/magazine/dd419661.aspx
注意那篇文章中的注释,比如如果你想正常捕获它们而不是按照他们的建议执行 finally 块并退出,添加legacyCorruptedStateExceptionsPolicy=true
到你的配置文件中。
不带 () 的捕获将捕获不符合 CLS 的异常,包括本机异常。
try
{
}
catch
{
}