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 von Drittanbieter mit einbinden
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

DLL von Drittanbieter mit einbinden

beantworten | zitieren | melden

Hallo zusammen.

Ich habe eine EXE Datei erstellt (nennen wir sie jetzt mal "Programm.exe", die später einfach durch kopieren auf jedem Windows Rechner verwendet werden kann. Eine Art Portable Version quasi. Klappt auch soweit.

Nun habe ich aber eine Zusatzfunktion eingebaut, bei der ich das NutGet Paket "DotNetZip" verwende. Diese DLL kann ich aber nicht fest in meine EXE einbinden, so dass diese nicht mit kopiert werden muss. Versteht ihr wie ich es meine?

Also der Anwender soll weiterhin sich nur die "Programm.EXE" kopieren müssen ohne zusätzlich die DotNetZip.DLL auch mit kopieren zu müssen.

PS: Wie bereits in anderen Threads schon erwähnt: Absoluter C# Anfänger.:-(
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.356

beantworten | zitieren | melden

Verwendest du .NET Framework 4.x oder .NET 5/6?
Suche mal nach ILMerge bzw. "self-contained".
private Nachricht | Beiträge des Benutzers
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

Verwende .Net Framework 4.6
private Nachricht | Beiträge des Benutzers
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

Ok, dann schaue ich mir das mal mit ILMerge usw. an. Danke schon mal:-)
private Nachricht | Beiträge des Benutzers
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

Prima.
Habe es nun hinbekommen:-)

Aber nur mit dieser Lösung hier:
http://www.digitallycreated.net/Blog/61/combining-multiple-assemblies-into-a-single-exe-for-a-wpf-application

Denn z.b. das ILMerge wird nicht mehr unterstützt und kann bei Microsoft auch nicht mehr heruntergeladen werden.

Danke nochmal.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.356

beantworten | zitieren | melden

Nur zur Info. ILMerge gibt es weiterhin auf GitHub: ILMerge (und auch als NuGet Package), aber du hast recht, es funktioniert nicht mit WPF, da es die XAML Ressourcen nicht korrekt einbinden kann.
Aber es gibt LibZ als Alternative. ;-)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.839

beantworten | zitieren | melden

Beachte, dass Du je nach Lizenz die Drittanbieter-DLL nicht mit ILMerge einbetten darfst.
In 99% der Fälle ist das untersagt. Dein Paket verwendet MS-PL als Lizenz, in der das aber _glaube ich_ erlaubt ist.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.975

beantworten | zitieren | melden

https://www.nuget.org/packages/Costura.Fody/ ist viel einfacher
private Nachricht | Beiträge des Benutzers
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

Danke für eure ganzen Antworten. Musste leider alles wieder zurück bauen :-(
Aber nur weil das extrahieren nicht klappt. Egal ob mit der DLL von Drittanbieter (verschiedene probiert) oder mit den internen Tool (System.IO.Compression), es bricht immer mitten drin beim extrahieren ab.

Extrahiere ich die ZIP Datei manuell mit z.b. 7-Zip funktioniert es prima. Also komprimieren geht aus meinem Programm heraus. Und da ich die ZIP Datei mit 7Zip normal öffnen kann, scheint dort auch nicht das Problem zu liegen. Entweder bricht es beim extrahieren ab, weil die ZIP-Datei ziemlich gross ist oder keine Ahnung. Als ich es mit einer kleinen Zip-Datei machte, ging es problemlos. Nur bei grösseren bricht es ab.

Als Background: Ich habe ein Tool erstellt mit dem User Ihre Daten sichern können. Dabei wird ein Sicherungsordner erstellt, wo alles reinkopiert wird und dann anschießend dieser in eine ZIP-Datei verpackt wird. Beim zurücksichern wählt der User die ZIP-Datei aus und das Tool soll mir die ZIP Datei unter C:\Users\xxx\appdata\temp\Extrahtsich extrahieren und dann von dort die Daten zurück kopieren. Anschließend löscht er diesen Ordner unter Temp wieder. Am Speicherplatz kann es nicht liegen. Da habe ich genügend. Läuft beim extrahieren evtl. der RAM voll oder was könnte das Problem sein? Jetzt war ich fast fertig und dann so ein blödes Problem. :-(

Wie gesagt, egal ob mit DotNetZip oder anderem Package oder mit dem internen Zip-Funktion....das extrahieren klappt nicht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.839

beantworten | zitieren | melden

Ohne genaue Exception und dazugehörigen StackTrace ist das für uns Glaskugelraten.
Da sowohl System.IO.Compression wie auch das von Dir genannte Paket sehr weit verbreitet ist - auch auf Enterprise-Ebene - ist die Wahrscheinlich gering, dass es an den Dependencies selbst liegt.
private Nachricht | Beiträge des Benutzers
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

Ok, als totaler Neuanfänger in C# (nie gelernt etc.) weiß ich nun nicht was du von mir brauchst? :-)

Also mit

System.IO.Compression.ZipFile.ExtractToDirectory(Dateiname, Extraxcttemp);


lass ich die Datei extrahieren. Dateiname = die Zipdatei und Extrattemp = das Verzeichnis wo es hin extrahiert werden soll.
private Nachricht | Beiträge des Benutzers
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

Also, ich habe nun das ganze mir genauer angeschaut wann er abbricht. Es bricht mir immer mit der Fehlermeldung "Illegales Zeichen im Pfad" ab. Dabei handelt es sich um irgendwelche Favoriten Lesezeichen im Ordner "Favoriten". Da das Tool ja jedem User die Möglichkeit geben soll, seine Daten wie Desktop, Dokumente, Downloads etc. zu sichern, kann ich nicht um voraus bestimmte Dateien/Verknüpfungen einfach ausschließen.

Was mich eben wundert: Egal ob mit WinZip, 7Zip oder mit dem int. Zip Funktion von Windows: Ich kann problemlos die Zip Datei komplett extrahieren. Wieso kann dies aber nicht DotNetZip oder das int. Zip von C# etc.??
Heute, private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.839

beantworten | zitieren | melden

Die Anwendungen können das wahrscheinlich auch nicht, sondern haben einfach ein Fehlerhandling eingebaut; ignorieren zB. solche Dateien.
Musst Du auch umsetzen. Da wirst wahrscheinlich noch einige solcher Fälle finden, zB auch sowas wie File Permissions, File in Use, Softlinks, Hardlinks...
Heute, private Nachricht | Beiträge des Benutzers
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

Hmm. Ok. Also File in Use fällt schon mal weg da diese nicht in Benutzung sein kann. File Permissions schließe ich auch aus, da ich dies schon mit dem Kopieren zuvor in den Ordner ausschließe. Softlinks und Hardlinks weiß ich nun nicht genau was du damit gerade meinst:-(

Tja, schade eigentlich. Wollte gerne, dass die Daten welcher der User sichert danach in eine ZIP gepackt wird und mit einem Kennwort verschlüsselt sind. Und nur der User kann kann dann mit diesem Tool auch ein Rücksichern machen. Also die Zip Datei extrahieren und die Daten zurückkopieren lassen. Ging/geht auch prima ...Aber wehe eine komische Datei ist dabei...dann bricht mir das extrahieren ab:-(
Heute, private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.839

beantworten | zitieren | melden

Tjo, das sind halt die Edge Cases der Software Entwicklung.
Da mussten andere auch durch. Du erfindest halt das Rad neu ;-)

Eine ZIP von Dateien ist jedoch eher auch ein Datengrab, statt ein Backup.
Warum haben die User nicht die Möglichkeit ein echtes Backup System zu nutzen? Hat ja Windows auch in einer gewissen Art eingebaut, zumindest in der Form der File Histories.
Heute, private Nachricht | Beiträge des Benutzers