2013-06-11 6 views
19

Ich bin auf der Suche nach einer Möglichkeit, den Standard app domain in meinem Prozess zu finden. Beachten Sie, dass sich die aktuelle Anwendungsdomäne möglicherweise von der Standarddomäne unterscheidet, z. B. wenn mein Code innerhalb von NUnit ausgeführt wird.Zugriff auf die Standard-App-Domäne

Ich weiß, dass ich alle App-Domänen in den Prozess mit a COM interop trick shown in this answer auflisten kann, und wählen Sie die, für die IsDefaultAppDomain()true ist. Dies scheint jedoch eine schwergewichtige Lösung zu sein.

Gibt es eine Möglichkeit, die Standard-Anwendungsdomäne zu erhalten, die keine Filterung aller Domänen erfordert, vorzugsweise ohne COM-Interop zu durchlaufen?

+4

Wir haben den obigen COM-Interop-Trick verwendet; Ich frage mich jedoch, ob es möglich ist, die Standard-App-Domain als Referenz zu speichern, wenn die App startet (etwa in "Main"), und schaue einfach nach. – dash

+0

Ja, Sie können eine domäneneutrale Assembly erstellen, und in dieser Assembly können Sie einen Verweis auf die standardmäßige AppDomain speichern (in einer statischen Eigenschaft). –

+0

@ M.A.Hanin Würde es Ihnen etwas ausmachen, diesen Ansatz zu illustrieren, oder vielleicht eine Antwort hinzuzufügen, die zeigt, wie das geht? Vielen Dank! – dasblinkenlight

Antwort

2

Das Framework unterstützt das meines Wissens nicht. Sie müssten die nicht verwaltete Lösung verwenden, die sie unterstützt.

+0

Ein MSDN-Blogpost aus dem Jahr 2007 sagt Folgendes: Da ich die Isolations- und Entladefähigkeit zeigte, wollte ich die AppDomains im aktuellen Prozess aufzählen. ** Überraschenderweise gibt es keine verwaltete API in der BCL, die angezeigt wird AppDomains. ** Mit Interop können wir jedoch die AppDomains auflisten http://blogs.msdn.com/b/jackg/archive/2007/06/11/enumerating-appdomains.aspx – Gebb