Laden...

DLL in andere DLL einbetten

Erstellt von theYoRecords vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.619 Views
T
theYoRecords Themenstarter:in
73 Beiträge seit 2012
vor 11 Jahren
DLL in andere DLL einbetten

Hallo!

Ich bin gerade dabei einen Dependency Embedder zu schreiben und scheitere im Wesentlichen an DLL-Projekten. Mit WPF funktioniert es schon mal wunderbar (über das AssemblyResolve-Event), in WinForms scheint das schon nicht mehr zu funktionieren, aber vor Allem bei Libraries weiß ich beim besten Willen nicht wie das funktionieren soll, da es ja keinen Einstiegspunkt gibt..

Zu diesem Thema findet man auch keine brauchbaren Informationen, wahrscheinlich weil es nicht funktioniert.
Wollte einfach einmal wissen was ihr davon haltet.

Danke im Voraus!

K
8 Beiträge seit 2012
vor 11 Jahren

Hallo theYoRecords,

kannst du bitte nochmal genau erläutern, was du tun möchtest? Ich habe da im Moment noch ein paar Fragezeichen vor meinen Augen, was du eigentlich meinst 😛.

Vielleicht kann ich dir hir dann weiterhelfen!

Viele Grüße
KingMike

4.221 Beiträge seit 2005
vor 11 Jahren

Suchst Du so etwas wie Assembly.GetReferencedAssemblies

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

T
theYoRecords Themenstarter:in
73 Beiträge seit 2012
vor 11 Jahren

Danke für eure Antworten und Sorry wegen der ungenauen Erklärung.

Mein Programm soll alle Abhängigkeiten (fürs Erste mal alle Bibliotheken, außer den Framework-Libs) in das Projekt einbetten und dann kompilieren.
Bei einer WPF- oder WinForms-Anwendung z.B. löse ich das Problem, indem ich dem betroffenen Projekt zuerst die Abhängigkeiten als eingebettete Resourcen hinzufüge und dem Einstiegspunkt bzw. den Einstiegspunkten ein paar Zeilen Code hinzufüge die dann im AssemblyResolve-Event die Bibliotheken automatisch aus den Resourcen laden anstatt vom referenzierten Ort.

Meine Frage ist jetzt, ob das bei DLLs auch irgendwie möglich ist (obwohl sie keinen Einstiegspunkt haben an dem man seine Methode für das AssemblyResolve-Event anmelden könnte.

16.806 Beiträge seit 2008
vor 11 Jahren

Du willst eine DLL als eingebettete Ressource in eine DLL packen? Mh?
Wieso fügst Du die DLLs nicht mit ILMerge zusammen? Weisst Du da überhaupt, was Du tust, oder hattest das als Idee und findest das irgendwie gut?

K
8 Beiträge seit 2012
vor 11 Jahren

Meine Frage ist jetzt, ob das bei DLLs auch irgendwie möglich ist (obwohl sie keinen Einstiegspunkt haben an dem man seine Methode für das AssemblyResolve-Event anmelden könnte.

Mh gute Frage, damit hatte ich dann doch noch nicht zu tun. Ich dachte an folgendes:
Du erstellst DLL1, die von DLL2 auf Klassen zurückgreift. In diesem Fall eben ganz einfach den Verweis der DLL2 im Projektexplorer von DLL1 hinzufügen. Aber wenn ich das jetzt richtig verstanden habe, dann hat das damit nichts zu tun 😦...

643 Beiträge seit 2006
vor 11 Jahren

Ich hab vor einiger Zeit etwas ähnliches gemacht. Ich glaube du musst die Assembly nur ins Appdomain laden. Dann mit AssemblyResolve auflösen. Das funktioniert bei jeder .NET Bibliothek egal ob Webforms oder sonst was. Ich habe Mono.Cecil benutzt weil ich noch die Assembly modifiziert habe. Wenn du aber Appdomain und Plugin in google eingibst findest auch einen einfachen Weg.

T
theYoRecords Themenstarter:in
73 Beiträge seit 2012
vor 11 Jahren

Danke für eure Antworten!

@Abt: Im Moment kann ich dir den Grund dafür leider nicht sagen, aber ich erinnere mich, dass ein paar Argumente dagegen sprechen.
Bis zu dem Punkt, an dem ich eben nicht weiter weiß, weiß ich natürlich was ich mache.

@KingMike: Klare Themaverfehlung. Danke trotzdem.

@Ayke: Aber die Frage ist ja, wo ich meine Methode dann fürs AssemblyResolve-Event anmelden soll, da es ja keinen normalen Einstiegspunkt gibt.
Ich könnte mir höchstens vorstellen, das in jeder Methode zu machen. Das würde jedoch neue Probleme aufwerfen und ich weiß auch nicht ob es so überhaupt funktionieren würde.. Jedenfalls müsste es, sollte es überhaupt irgendwie funktionieren, das auf eine weniger umständliche (bzw. schönere) Weise tun.

F
10.010 Beiträge seit 2004
vor 11 Jahren

Da hast Du wohl etwas falsch verstanden.
AssemblyResolve muss bei jeder Appdomain Registriert werden, das reicht dann aber einmal vollkommen aus.

T
theYoRecords Themenstarter:in
73 Beiträge seit 2012
vor 11 Jahren

Ganz verstehe ich nicht was du mir damit sagen willst.. Mir ist schon klar, dass ich mich nur einmal fürs Event anmelden muss, falls du das meinst.

F
10.010 Beiträge seit 2004
vor 11 Jahren

Aber die Frage ist ja, wo ich meine Methode dann fürs AssemblyResolve-Event anmelden soll, da es ja keinen normalen Einstiegspunkt gibt.
Ich könnte mir höchstens vorstellen, das in jeder Methode zu machen.

Dann lies dir nochmal genau durch was Du geschrieben hast.

T
theYoRecords Themenstarter:in
73 Beiträge seit 2012
vor 11 Jahren

OK, dann hab ich mich wohl falsch ausgedrückt.. Ich bin in dem Fall von öffentlichen statischen Methoden ausgegangen. Sonst halt Konstruktoren und öffentliche statische Properties.

Hab das Problem jetzt übrigens eh auf diese Weise gelöst.
Das Projekt wird um eine statische Klasse mit den Methoden erweitert und an oben genannte Stellen kommt ein Verweis auf die Signup-Methode (in der zuerst überprüft wird ob die Methode schon registriert wurde).
Scheinbar ist das wohl der einzige Weg.