2010-10-26 99 views
2

我想運行一個應用程序域內第三方庫(XSP在這種情況下),所以我可以將它關閉或者控制其行爲的所有應用程序域。關閉一個AppDomain,它創造了

的基本過程:

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

當孩子應用程序域創建一個應用程序域本身不工作。當我關閉「孩子」時,它創建的任何應用程序域仍然存在。

我想能夠說「這卸載,一切都在它裏面」或當​​一個應用程序域創建一個新的應用程序域檢測這樣我就可以把它添加到的東西來清理清單。

是否有API來支持這兩種方法的?

是否有另一種方式來實現,而不產卵操作系統的進程是一回事嗎?

回答

1

還沒有試過這個,但是如果你至少在2.0,你應該能夠配置一個替代品AppDomainManager,覆蓋它的CreateDomain()方法,並且通過值的值跟蹤AppDomain之間的父子關係靜態AppDomain.CurrentDomain屬性在CreateDomain()的調用中。一旦你跟蹤了父母和孩子,你可以強制他們的unloading

然而,這是相當粗魯,可以使你的程序不穩定,這取決於你的第三方庫的最新動態。進程是更昂貴的,但也更可靠的方式來包裝第三方代碼。

+0

謝謝。在這裏找到一些關於這種方法的更多信息http://blogs.msdn.com/b/shawnfa/archive/2004/11/12/256550.aspx – Phil 2010-10-26 10:04:49

0

您應該爲DomainUnload事件創建eventHandler,因此當您卸載您的子域時,請檢查它是否有任何子項,然後卸載它們。

+1

是的,但是如何找到孩子? – Phil 2010-10-26 09:53:14

+0

你必須自己追蹤你的域名。例如 - 創建一個詞典或DomainUnload事件 – Ash 2010-10-26 10:03:12

+0

當然任何其他的方式和過程,但我怎麼找到當孩子創造一個新的應用領域? – Phil 2010-10-26 12:41:09