2013-06-11 99 views
19

我正在尋找一種方法來查找我的過程中的默認app domain。請注意,當前的應用程序域可能與默認的不同,例如當我的代碼在NUnit內運行時。訪問默認應用程序域

我知道我可以使用a COM interop trick shown in this answer列出進程中的所有應用程序域,並選擇其中IsDefaultAppDomain()true的那個。但是,這似乎是一個重量級的解決方案。

有沒有辦法讓默認的appdomain不需要過濾所有的域,最好不經過COM interop?

+4

我們已經使用了上面的COM Interop技巧;然而,我想知道是否有可能在你的應用程序啓動時(例如在'Main'中)將默認應用程序域作爲參考存儲在某個地方,然後查看它? – dash

+0

是的,您可以創建一個與域無關的程序集,並且在該程序集中可以存儲對默認AppDomain的引用(在某些靜態屬性中)。 –

+0

@ M.A.Hanin您是否介意說明這種方法,或者添加一個答案來說明如何做到這一點?謝謝! – dasblinkenlight

回答

2

據我所知,該框架並不支持。您將不得不使用支持它的非託管解決方案。

+0

一個追溯到2007年的MSDN博客文章說:當我顯示隔離和卸載能力時,我想枚舉當前進程中的AppDomain。**令人驚訝的是BCL中沒有託管API可以顯示AppDomains。**但是,使用Interop,我們可以列出AppDomains。http://blogs.msdn.com/b/jackg/archive/2007/06/11/enumerating-appdomains.aspx – Gebb