Frage

Ich möchte einen oder mehr DLLs dynamisch laden, so dass sie mit einem anderen Sicherheits oder basepath laufen als meine Hauptanwendung. Wie lade ich diese DLLs in einer separaten AppDomain und instanziiert Objekte von ihnen?

War es hilfreich?

Lösung

Insbesondere

AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy

string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);

Wenn das alles richtig (keine Ausnahmen geworfen) geht haben Sie jetzt eine Instanz von TypeIWantToLoad in die neue Domäne geladen. Die Instanz, die Sie haben, ist eigentlich ein Proxy (da das eigentliche Objekt in der neuen Domäne ist), aber man kann es genau wie Ihr normales Objekt verwenden.

Hinweis: Soweit ich weiß, hat TypeIWantToLoad von MarshalByRefObject erben

.

Andere Tipps

Wenn Sie 3,5 Targeting sind, können Sie die Vorteile des neuen erweiterbares Framework verwaltet rel="nofollow alle schweres Heben für Sie zu behandeln.

Sie können die AppDomain.CreateInstance Methode, dies zu tun . Sie müssen die Unwrap-Methode der Object aufzuzurufen, die am eigentlichen Objekt erhalten zurückgeführt wird.

Erstellen Sie ein neues Appdomain mit AppDomain.Create (...). Nach dem AppDomain Erstellen des DLLs in diese AppDomain laden.

Schauen Sie in allen Methoden, die Appdomain * mit Create hat. Es gibt bestimmte Dinge wie CreateInstanceAndUnwrap, etc.

Wie bereits erwähnt, verwenden AppDomain.CreateDomain eine neue Anwendungsdomäne zu erstellen. Sie können dann eine Baugruppe hinein laden Sie die Load-Methode verwenden, oder sogar eine Baugruppe mit der ExecuteAssembly Methode auszuführen. Sie können GetAssemblies verwenden, um festzustellen, ob eine Baugruppe bereits geladen wurde. Seien Sie auch bewusst, dass Sie nicht eine Baugruppe entladen kann, wenn es geladen wird. Sie müssen die Domain entladen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top