Mehrfach an AssemblyResolve anhängen

Rippa_HD

Mitglied
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?
 
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.
 
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.
 
Zuletzt bearbeitet:
Zurück