17

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

  1. 尝试/捕获块
  2. AppDomain.UnHandledExption += ...
  3. RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true)在 AssmblyInfo 文件中标记。

我还可以做些什么?

4

2 回答 2

21

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

更多在这里, http: //msdn.microsoft.com/en-us/magazine/dd419661.aspx

注意那篇文章中的注释,比如如果你想正常捕获它们而不是按照他们的建议执行 finally 块并退出,添加legacyCorruptedState­­ExceptionsPolicy=true到你的配置文件中。

于 2012-05-09T13:35:28.670 回答
-2

不带 () 的捕获将捕获不符合 CLS 的异常,包括本机异常。

try
{

}
catch
{

}
于 2012-05-09T13:38:40.137 回答