2012-05-09 34 views
17

我有一个混合的.NET和本机代码控制台应用程序。由于Visual C运行时库致命错误,应用程序进程终止。即使我使用以下,托管代码没有赶上机异常:无法捕捉托管代码中的本机异常

  1. try/catch块
  2. AppDomain.UnHandledExption += ...
  3. 标志着AssmblyInfo文件RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true)

我还能做什么?

回答

21

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

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

留意该文章中的音符,就像如果你想赶上他们通常不是按照他们的执行finally块和退出的建议,添加legacyCorruptedState­­ExceptionsPolicy=true到您的配置文件。

+0

这对我有很大的帮助。非常感谢你。 – Newbee

-2

没有捕获()会捕获非CLS兼容的异常,包括本地异常。

try 
{ 

} 
catch 
{ 

} 
+0

试过了,并没有为我工作。 – DoronBM

+0

我根据这个FxCop规则发表了我的评论.. http://msdn.microsoft.com/en-gb/bb264489.aspx 对不起,它没有工作.. – Oscar