System.AccessViolationException 异常处理
在 .NET 应用程序中使用 COM 对象时,经常会遇到 System.AccessViolationException 异常。然而,通常情况下,此异常会被调试器拦截,阻止程序执行并防止已实现的 catch 块被执行。
造成此问题的原因在于 .NET Framework 4.0 通过 Windows 结构化异常处理 (SEH) 处理异常的方式。某些异常,例如 AccessViolationExceptions,被视为损坏状态异常 (CSE),由于它们指示状态损坏,因此标准托管代码无法捕获它们。
尽管存在此限制,但仍有一些解决方法可以启用 CSE 处理:
降级到 .NET 3.5: 将应用程序重新编译为 .NET 3.5 程序集,并在 .NET 4.0 运行时中执行它。
修改应用程序配置: 在配置文件的 runtime 元素下添加以下行:
<code class="language-xml"> <legacycorruptedstateexceptionspolicy enabled="true"></legacycorruptedstateexceptionspolicy></code>
使用属性修饰: 使用 HandleProcessCorruptedStateExceptions 属性来修饰您打算在其中捕获 CSE 的方法。
有关 CSE 的更多信息,请参阅以下资源:
以上是如何处理 .NET 应用程序中的 System.AccessViolationException?的详细内容。更多信息请关注PHP中文网其他相关文章!