【发布时间】:2011-07-26 12:58:44
【问题描述】:
我们有一个应用程序,作为它的要求之一,它将采用任意 3rd 方插件,加载它们,并与我们自己开发的应用程序一起运行它们的 UI。我们一直在将这些 3rd 方插件加载到他们自己的 AppDomain 中以进行隔离,并且一切正常。
直到其中一个插件因未处理的异常而崩溃。在这种情况下,整个应用程序都会出现故障,即使真正受到影响的只是我们的“额外”工具窗口之一。
理想情况下,我们希望有某种方法来处理“未处理”异常,卸载损坏的 AppDomain,然后重新加载它。问题是我们找不到机制在未处理异常的事件处理程序中,我们可以将异常标记为“已处理”。此外,由于插件有自己的 UI 组件和自己的用户交互集,因此很难将我们与插件的交互“包装”在 try/catch/finally 块中。
是否有任何框架/编程库/模式可以帮助解决这个问题?我们可以很好地做插件; 我们需要帮助的是在不同 AppDomain 中的代码意外失败时保持应用程序的运行。
【问题讨论】:
-
值得重申的是,这里的主要目标是在 AppDomain 崩溃中幸存下来。
标签: .net architecture plugins error-handling crash-recovery