Laden...

DLL-Datei in Projekt inkludieren

Erstellt von qwertz vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.194 Views
Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren
DLL-Datei in Projekt inkludieren

Hallo,

ich habe mir die SharpZipLib heruntergeladen und als Verweis in mein Projekt eingebunden. Das funktioniert soweit auch alles recht gut, bis ich die fertige EXE-Datei in einem anderen Verzeichnis ausführe.

Denn wenn die Datei in einem Verzeichnis ausgeführt wird, in dem die DLL-Datei der SharpZipLib nicht vorhanden ist, funktioniert ein Großteil der Funktionen nicht und das Programm endet in einer Exception.

Gibt es einen einfachen Weg, die DLL-Datei in das Projekt zu inkludieren (wenn möglich nicht als Ressource)?
Letztlich sollte der Benutzer also nur die fertige EXE-Datei sehen.

Viele Grüße und ein Dankeschön schon im Voraus,
qwertz

1.549 Beiträge seit 2004
vor 16 Jahren

Suche Benutzen 😉

Assembly in exe einbinden

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

Inzwischen habe ich die DLL-Datei als Ressource in das Projekt eingebunden.

Sobald das Programm gestartet wird, wird folgende Anweisung ausgeführt:

Assembly theAssembly = Assembly.Load(Properties.Resources.ICSharpCode_SharpZipLib);

Da ich jetzt aber keine entsprechende using-Direktive zu der DLL-Datei setzen kann, erhalte ich bei den jeweiligen Aufrufen der Klasse (logischerweise) folgenden Fehler:

Der Typ- oder Namespacename "ZipOutputStream" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?)

Ein möglicher Aufruf sieht zum Beispiel folgendermaßen aus:

ZipOutputStream = new ZipOutputStream(File.Create(thePath));

Welche Schritte sind nötig, damit alles wie gewünscht funktioniert?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo qwertz,

am besten du fügst doch den Verweis hinzu, sonst wird es aufwändig, weil du sonst jedes Fitzelchen einzeln per Reflection machen musst.

herbivore

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

Hallo herbivore,

aber dann sagt er mir Folgendes (was ja auch logisch erscheint):

Der Typ- oder Namespacename "[...]" konnte nicht gefunden werden.

Oder willst du damit sagen, dass ich es über diesen Weg lieber bleiben lassen soll, da es allgemein zu aufwändig werden würde?

Gruß,
qwertz

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo qwertz,

der Weg per Reflection wäre zu aufwändig. So habe ich das gemeint. Für den Verweis auf die DLL lieber dem Projekt hinzu.

herbivore

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

OK, ich füge dem Projekt einen Verweis auf die DLL-Datei hinzu.
Bloß wie löse ich dann mein Problem?
Die DLL-Datei ist ja so gesehen nur eine Ressource in meinem Projekt, die ich über "Verweis hinzufügen" nicht wählen kann.
Und eine using-Direktive hinzuzufügen, funktioniert ebenfalls nicht.

Gruß,
qwertz

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo qwertz,

das geht nicht. Entweder oder.

herbivore

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

Das heißt, ich kann die DLL-Datei, die eine Ressource ist, so nicht verwenden, wie in dem oben von S.H.-Teichhof verlinkten Thread vorgeschlagen wurde?
Das würde mich wundern, denn auch über Google und MSDN habe ich diesen Tipp gefunden.
Bloß stehe ich noch vor dem oben genannten Problem mit dem Assemblyverweis.

Welchen Weg würdest du denn vorschlagen, um die DLL- in die fertige EXE-Datei zu inkludieren und als Assembly zu verwenden?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo qwertz,

Das heißt, ich kann die DLL-Datei, die eine Ressource ist, so nicht verwenden, wie in dem oben von S.H.-Teichhof verlinkten Thread vorgeschlagen wurde?

du kannst eine DLL nicht in die Ressourcen packen und gleichzeitig eine Verweis darauf hinzufügen. Um die DLL nutzen zu können, müsstest du die DLL aus den Ressourcen auspacken und zum Auspacken müsste das Programm gestartet sein, was nicht geht, solange die DLL nicht ausgepackt ist. Da beißt sich die Katze in den Schwanz.

Also bleibt der Weg über Load.Assembly. Dann kann kannst du die DLL aber nicht als Verweis hinzufügen und musst alle Zugriffe per Reflection machen. Das ist aber i.d.R. zuviel Aufwand.

Das meinte ich mit es geht nicht.

Welchen Weg würdest du denn vorschlagen, um die DLL- in die fertige EXE-Datei zu inkludieren und als Assembly zu verwenden?

Ich würde die DLL nicht in die EXE-Datei inkludieren. Ich würde mir den nötigen Aufwand einfach nicht antun wollen.

herbivore

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

Hallo herbivore,

weißt du eine Quelle, wo ich ein fertiges Beispiel finden kann, das die weitere Verwendung der Klassen, Methoden und Typen einer Assembly nach der Ausführung von Assembly.Load() und theAssembly.CreateInstance() behandelt?
Über Google und MSDN habe ich nichts gefunden.

Gruß,
qwertz

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo qwertz,

ein Beispiel brauchst du da eigentlich nicht. Assembly.Load und theAssembly.CreateInstance kennst du ja und die Zugriffe muss du eben über Reflection machen, also über MemberInfo bzw. deren Unterklassen. Um eine Methode aufzurufen, also MethodeInfo.Invoke oder um auf eine Property zuzugreifen PropertyInfo.Get/SetValue. Bei der Beschreibung dieser Methode in der :rtfm: Doku findest du ja auch Codebeispiele.

herbivore