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: 19

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.355

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: 19

Themenstarter:

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 19

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: 19

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.355

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.826

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: 19

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

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.826

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.
Gestern, private Nachricht | Beiträge des Benutzers
Butzi74
myCSharp.de - Member



Dabei seit:
Beiträge: 19

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.
Gestern, private Nachricht | Beiträge des Benutzers