tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
792
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Rippa_HD Rippa_HD ist offline Mitglied Bronze
    Registriert seit
    Feb 2004
    Beiträge
    44
    Hallo zusammen.

    Folgendes Problem:

    Ich habe ein Programm dessen Assemblies an einem anderen Ort liegen. Um das zu lösen habe ich mich für das AssemblyResolve Event entschieden um die Assemblies dann selbst zu laden wenn sie benötigt werden.

    Soweit funktioniert alles prima.

    Jetzt habe ich aber noch einen Programmteil, der eine DLL dynamisch nachlädt. Die Abhängigkeiten dieser nachgeladenen DLL liegen an wieder einem ganz anderen Ort. Die sauberste Lösung fände ich, wenn ich mich beim Laden dieser DLL ein zweites Mal an AssemblyResolve anhänge und dann nur in dem dazu passenden Verzeichnis suche.

    Dann hätte ich 2 Handler am AssemblyResolve hängen ich bin mir aber nicht ganz im klaren darüber wie das funktionieren soll, da das Event ja einen Rückgabewert (eine Assembly) hat und wenn 2 Methoden von dem Event angestoßen werden hätte ich ja 2 Rückgabewerte (im Normalfall einmal NULL und einmal die Assembly).

    Außerdem kann ich dann nicht mehr rausfinden, wenn eine DLL völlig fehlt, da mein Assemblyresolver ja davon ausgehen müsste, dass nach ihm noch ein zweiter Resolver kommt und die DLL evtl findet.

    Hat jemand eine Idee was mir weiterhelfen könnte? Funktioniert es überhaupt sich an Events die einen Rückgabewert haben mehrfach anzuhängen? Und wie verhält sich das Ganze dann?
     

  2. #2
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Hi.

    Und wie wäre es, wenn du einfach mit AppendPrivatePath die Pfade dazu gibt wo er nach Assemblies suchen soll, oder versteh ich grad was von der Situation / vom Problem nicht?

    MfG,
    Alex
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  3. #3
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Wieso liegen bei dir die Assemblies so verstreut? Was genau willst denn eigentlich machen? Ich denk mal, dass du im gesamten Ablauf ein kleines Problem hast ... aber vielleicht machts ja Sinn, wenn dus mir erklärst.
     

  4. #4
    Rippa_HD Rippa_HD ist offline Mitglied Bronze
    Registriert seit
    Feb 2004
    Beiträge
    44
    Das AppendPrivatePath funktioniert soweit ich sehe nur relativ zum AppDomain Hauptverzeichnis . .

    Also das Szenario ist folgendes:

    Ich hab eine Host-Anwendung, die ist in unmanaged C++ geschrieben und kommt von einer anderen Firma an der kann ich also nichts drehen.

    Innerhalb dieser Anwendung läuft mein Code als Plugin, die Plugins müssen alle eine Schnittstelle implementieren und in einem bestimmten Unterverzeichnis von der Hostanwendung liegen. In dieses Verzeichnis und in das der Hostanwendung will ich wirklich nur eine einzige DLL packen und nicht noch alle Abhändigkeiten meines Plugins. Das heisst die Abhängigkeiten müssen anders geladen werden.

    Eine Config Datei kommt nicht in Frage, da für die Host-Anwendung bereits so eine Config Datei vorhanden ist, die regelmäßig aktualisiert wird daher würden meine eigenen Einträge da drin immer wieder rausfliegen. Global Assembly Cache wollen wir nicht benutzen.

    Also muss ich in meinem Plugin die verwalteten Erweiterungen verwenden und meine .NET Assemblies aus einem anderen Programmverzeichnis laden. Das mache ich über AssemblyResolve.

    Jetzt ist es in meinem Plugin leider erforderlich, dass ich einen Teil unserer Bibliotheken nochmal als Fremdkomponenten verwenden muss. Das heisst eine von meinem C# DLLs läd diese "Fremdkomponenten" über Assembly.Load() aus einem anderen Programmverzeichnis nach.

    Ganz unten in meiner C++ DLL weiss ich nichts von diesen "Fremdkomponenten", daher kenne ich auch den Pfad zu diesen nicht. Das bedeutet meine Assembly die das nachläd muss auch dafür sorgen, dass die Abhängigkeiten zu diesen Fremdkomponenten gefunden werden. Die einzige Möglichkeit dazu sehe ich in AssemblyResolve, aber da hängt ja schon meine Bibliothek ganz unten dran . .

    Ich hoffe es ist einigermaßen verständlich geworden.
    Geändert von Rippa_HD (22.07.05 um 09:11 Uhr)
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 28.06.09, 08:28
  2. Mehrfach wenn !
    Von usebb im Forum Office-Anwendungen
    Antworten: 10
    Letzter Beitrag: 01.10.08, 17:51
  3. JSF Mehrfach Login
    Von Peregrin im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 19.09.08, 10:57
  4. C++, MDI und mehrfach include
    Von McMicha im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 26.03.07, 10:27
  5. Mehrfach Upload
    Von qsrs im Forum PHP
    Antworten: 3
    Letzter Beitrag: 21.01.07, 16:58