1

首先让我说,对于我的场景,插件将在应用程序启动时加载,并且在应用程序关闭之前不会被卸载,所以如果我在加载后无法卸载它们是完全可以的。

所以我知道如果插件崩溃,将插件加载到他们自己的 AppDomain 将保护我的应用程序,但假设插件不运行非托管代码,那么我不能只在 try/catch 块中包装对插件的调用以避免我的应用程序崩溃?或者我在这里错过了什么?

我试图使用 MAF 来执行此操作,但是我在远程处理我的对象时遇到了问题。也就是说,在这个时间点上,我所拥有的使它们可远程化的可用选项似乎都不是非常可取的。因此,在我切换到更原始的插件架构之前,谁能告诉我是否忘记了我应该将插件加载到单独的 AppDomain 的任何其他重要原因(或者我是否错误地能够简单地避免崩溃在调用周围使用 try/catch 块)?

4

1 回答 1

1

如果您不需要卸载它们,则不需要单独的 AppDomain。

AppDomains 不保护进程在未处理的异常情况下被杀死。new Thread(() => { throw null; }).Start()仍然是致命的。

所以你需要try-catch围绕插件入口点,你需要他们合作(没有线程崩溃)。

但是,如果您想中止某些计算,AppDomains 很有用。Thread.Abort如果您之后立即卸载整个 AppDomain,它们是一种相对安全的调用方式。

于 2013-01-19T12:07:10.850 回答