关闭AppDomain及其创建的所有AppDomain

时间:2010-10-26 08:53:21

标签: c# appdomain

我想在应用程序域内运行第三方库(在此实例中为XSP),以便我可以将其关闭并以其他方式控制其行为。

基本过程:

var child = AppDomain.CreateDomain(...) 
...
AppDomain.Unload(child)

当子应用程序域本身创建应用程序域时不起作用。当我关闭'child'时,它创建的任何应用程序域仍然存在。

我希望能够说'卸载此内容及其中的所有内容'或检测应用域何时创建新的应用域,以便将其添加到要清理的内容列表中。

是否有支持这两种方法的API?

是否有其他方法可以在不产生操作系统进程的情况下实现相同的目标?

2 个答案:

答案 0 :(得分:1)

没有试过这个,但是如果你至少是2.0,你应该能够配置替换AppDomainManager,覆盖其CreateDomain()方法,并跟踪父子关系AppDomains之间通过调用CreateDomain()的静态AppDomain.CurrentDomain属性的值。跟踪父母和孩子后,您可以强制他们unloading

然而,这相当粗鲁,可能会使您的流程不稳定,具体取决于您的第三方图书馆的功能。进程是一种更昂贵但也更可靠的包装第三方代码的方法。

答案 1 :(得分:0)

您应该为 DomainUnload事件创建eventHandler,以便在卸载子域时,检查是否有子域,然后卸载它们。