.NET GUI

.NET Community für WPF, Silverlight und mehr!
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

Laden einer Assembly in eine andere AppDomain

Letzter Beitrag 12-08-2008 11:49 von Norbert Eder. 3 Antworten.
Seite 1 von 1 (4 Treffer)
Beiträge sortieren: Zurück Weiter
  • 12-06-2008 19:01

    Laden einer Assembly in eine andere AppDomain

    Hab da ein leicht agressives Problem.  Big Smile

    Ich wollte mich mal mehr mit dem Thema Security beschäftigen und habe mir gedacht es wäre doch schön, meine Plugins, die ich so in meiner Anwendung lade in eine eigene AppDomain zu verbannen. Da hab ich dann einen zusätzlichen IsolationLevel und kann die Dinger dann auch dynamisch entladen. Die Load-Methode ist ja nicht dafür geignet, da sie nur für selte Interop Zwecke gedacht ist.

    Mit der Load Methode komme ich also nicht weit. Bin da recht schnell über eine Beitrag zu dem Thema auf mehreren Seiten gestoßen, auch eine, in der Norbert vor drei Jahren das erste mal mit diesem Problem konfrontiert wurde. Nur habe ich die Lösung nicht ganz verstanden.

    Lösungsvorschläge? Wie ich sowas umsetzen kann ohne eine Dumme FileLoadException zu bekommen?
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 12-06-2008 20:00 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 980
    • Punkte 14.949
    • ForumsAdministrator

    AW: Laden einer Assembly in eine andere AppDomain

    Answer

    Hallo,

    versuch mal das:

    AppDomain domain = AppDomain.CreateDomain("Meine neue AppDomain"); 
    String libPath = @"C:\myPlugin.dll"; Type t = typeof(MyFirstPlugin); MyFirstPlugin myObject = (MyFirstPlugin)domain.CreateInstanceFromAndUnwrap(libPath, t.FullName);

    Damit bekommst du einen Proxy auf das Objekt, weches in der neuen AppDomain geladen wurde. Du kannst natürlich auch die Assembly für Reflection-Zwecke durchgehen und dir raussuchen, welche Typen dein Interface (zb.: IPlugin) implementieren und kannst diese dann entsprechend laden.

    BTW: Ich habe das damals für meinen Application Server benötigt, da Anwendungen wieder vollständig entladen werden können sollten und zusätzlich auch, um mich vor Fehlern in den Anwendungen zu schützen. Insgesamt ging mein Weg noch um einiges weiter. Der obige Code sollte aber schon die richtige Richtung aufzeigen.

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 12-08-2008 9:23 Antwort zu

    AW: Laden einer Assembly in eine andere AppDomain

    Hört sich irgendwie logisch an, jetzt wo ich das so lese und nochmal drüber nachdenke. Gleich auch nochmal in der MSDN nachgeschaut. Steht auch so drinnen ... Ist aber irgendwie unituitiv, wie ich finde.

    Vielleicht bin ich da auch zu sehr C/C++ geschädigt, mit LoadLibrary.

    Vielen Dank
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 12-08-2008 11:49 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 980
    • Punkte 14.949
    • ForumsAdministrator

    AW: Laden einer Assembly in eine andere AppDomain

    Sicher nicht die beste Variante, da gebe ich dir durchaus recht. Ich hatte mich damals an dieser Stelle auch herumgeärgert.
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (4 Treffer)
Powered by Community Server (Commercial Edition)    69° - Internet-Agentur München (CMS, ASP.NET, Webdesign)