我遇到了一个行为不端的库,它在终结器中引发异常,这当然会使应用程序崩溃。
为了避免这种情况,我尝试将库加载到它自己的 AppDomain 中,但异常仍然浮出水面并使应用程序崩溃。
正如 MSDN 上所记录的,注册到AppDomain.UnhandledException
并不能防止异常冒泡,但我很惊讶没有其他方法可以在“子 AppDomain”中捕获此类异常。
插件主机或使用 AppDomain 对可能有害的代码进行沙箱处理的应用程序如何阻止未处理的异常?事实上可能吗?
注意:我已经有另一种解决方法,这里描述的那个。坏的终结器位于一个长期存在的对象上,该对象似乎只在关闭期间被收集,因此向用户隐藏这个“虚假”错误就足够了。不过,我发现这种解决方法很脆弱,因为它要么隐藏其他真正的错误,要么如果早点收集对象,就有可能炸毁我的应用程序。