Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
DLL in andere DLL einbetten
theYoRecords
myCSharp.de - Member



Dabei seit:
Beiträge: 77

Themenstarter:

DLL in andere DLL einbetten

beantworten | zitieren | melden

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!
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von theYoRecords am .
private Nachricht | Beiträge des Benutzers
KingMike
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Nürnberg

beantworten | zitieren | melden

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 :P.

Vielleicht kann ich dir hir dann weiterhelfen!

Viele Grüße
KingMike
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Suchst Du so etwas wie Assembly.GetReferencedAssemblies
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
theYoRecords
myCSharp.de - Member



Dabei seit:
Beiträge: 77

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15690
Herkunft: BW

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
KingMike
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Nürnberg

beantworten | zitieren | melden

Zitat von theYoRecords
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 :(...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von KingMike am .
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 655
Herkunft: Hamburg

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Ayke am .
private Nachricht | Beiträge des Benutzers
theYoRecords
myCSharp.de - Member



Dabei seit:
Beiträge: 77

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von theYoRecords am .
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10070

beantworten | zitieren | melden

Da hast Du wohl etwas falsch verstanden.
AssemblyResolve muss bei jeder Appdomain Registriert werden, das reicht dann aber einmal vollkommen aus.
private Nachricht | Beiträge des Benutzers
theYoRecords
myCSharp.de - Member



Dabei seit:
Beiträge: 77

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10070

beantworten | zitieren | melden

Zitat
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.
private Nachricht | Beiträge des Benutzers
theYoRecords
myCSharp.de - Member



Dabei seit:
Beiträge: 77

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von theYoRecords am .
private Nachricht | Beiträge des Benutzers