Laden...

WPF OnceClick Anwendung mit inkludiertem .NET Core zu gross?

Erstellt von habib vor 3 Jahren Letzter Beitrag vor 3 Jahren 929 Views
H
habib Themenstarter:in
24 Beiträge seit 2020
vor 3 Jahren
WPF OnceClick Anwendung mit inkludiertem .NET Core zu gross?

Rein aus Testzwecken habe ich nur eine kleine GUI unter WPF mit NetCore3.1 entwickelt. Bisher noch keine Logik eingebaut, nur rein das GUI.

Das Ganze habe ich als OnceClick veröffentlicht und bekam auch eine 181 Kb Datei heraus. Auf meinem System lief sie problemlos, allerdings auf einem frisch installierten Windows (da wo die Anwendung genutzt werden soll) bekam ich die Meldung das NetCore installiert sein muss.

Also das ganze nochmals neu kompiliert und unter Bereitstellungsmodus: Eigenständig angegeben. Damit ging es dann auch auf dem frischen Windows. Aber nun ist die Datei 180 MB groß. Dies finde ich ein bisschen arg groß. Wo mache ich einen Fehler, wo denke ich vlt. falsch? Oder wo hab ich vlt. einen Haken vergessen?

16.806 Beiträge seit 2008
vor 3 Jahren

Siehe Dokumentation zu "Self Contained" aka Eigenständig.

Damit packst Du die gesamte Runtime mit in Dein Applikationsdeployment; und ja, dann sind das eben 180 MB.
Der Vorteil ist, dass Du damit eben die Runtime selbst in der Hand hast (ich bin ein großer Fan davon) und auf dem Zielsystem kein .NET Core als Runtime installiert sein muss; der Nachteil ist eben, dass es größer wird.

Abhilfe hilft Trimming, das es auf Assembly- und auf Methoden-Ebene gibt (letzteres erst mit .NET 5 und ist aktuell nicht production-ready).
Damit werden Assemblies oder eben Assembly-Inhalte entfernt, die Deine Anwendung nicht braucht und das gesamte Deployment entsprechend kleiner.

Aber wie gesagt; alles sehr gut dokumentiert.
.NET Core App Deployment
App Trimming in .NET 5

H
habib Themenstarter:in
24 Beiträge seit 2020
vor 3 Jahren

Den ersten Link hatte ich schon gefunden, trotzdem danke.

Aber gerade wenn ich nur ein kleines Tool haben möchte dann finde ich 180 MB ein bisschen arg viel.

Gerade kam mir ein Einfall und ich habe das ganze nochmals mit .Net Framework 4.7... neu geschrieben und das ganze als *.exe aus dem Debug Ordner geholt. Diese ist nun nur 81 KB groß und läuft auf dem frisch installierten Windows.
Wäre dies auch ein Weg?

16.806 Beiträge seit 2008
vor 3 Jahren

.NET Framework ist abgekündigt und erfordert genauso wie .NET Core die Runtime auf Windows.
Ohne Runtime auf dem Zielsystem kommst Du nicht an Dein Ziel mit .NET.

Dann musst halt die Runtime als Voraussetzung stellen, dann musst sie nicht mitliefern.

H
habib Themenstarter:in
24 Beiträge seit 2020
vor 3 Jahren

.NET Framework ist angekündigt und erfordert genauso wie .NET Core die Runtime auf Windows.

Verstehe ich nicht, was meinst du damit?

Habe jetzt gelesen das die .Net Runtime 4.8... Standardmäßig mit installiert wird bei Windows 10. Also kann ich dies als vorausgesetzt ansehen. Außer das ich die neuen Dinge von .Net Core nicht nutzen kann, dürfte es doch keine Probleme geben?

16.806 Beiträge seit 2008
vor 3 Jahren

4.8 ist die letzte Version von .NET Framework; danach kommt nichts mehr.
.NET Core 5 (vollständiger Name wird dann nur .NET 5) ist die Zukunft.

Standardmäßig bei Windows 10 ist 4.6.1.
Erst mit Update 1709 ist es Version 4.8.

16.806 Beiträge seit 2008
vor 3 Jahren

Oh. Korrigiert. Danke.

H
habib Themenstarter:in
24 Beiträge seit 2020
vor 3 Jahren

Habe das ganze nochmal als Release veröffentlicht und erneut 180 MB erhalten.
Irgendwie will das ganze nicht in meinen Kopf warum eine einfach GUI Anwendung, die noch nichts macht, so groß wird. Ok, verstanden habe ich das sie die gesamte Runtime mit innehat und somit so groß wird.

Ein Kollege von mir hat ein Tool in Delphi geschrieben und das ist gerade einmal 4 MB groß. Als Vergleich habe ich nur mal die GUI nachgebaut und komme allein da schon auf 120 MB? Und ich habe auf meinem System kein Delphi installiert, daher muss da ja auch alles mitkommen. Kann mir das bitte jemand erklären?

16.806 Beiträge seit 2008
vor 3 Jahren

Nochmal: da ist nicht nur Deine Anwendung drin - sondern die gesamte Runtime.
Dein Kollege hat nicht die Runtime im Deployment - aber Du.

4.931 Beiträge seit 2008
vor 3 Jahren

Die Standard UI-Controls von Delphi (VCL) basieren auf den Windows Controls (WinAPI), d.h. diese sind schon im Windows Kernel enthalten (User32.dll, comctl32.dll, ...), während WPF eine komplette Neuprogrammierung auf Basis von DirectX ist (während Windows Forms (WinForms) ebenfalls auf den Standard UI-Controls der WinAPI basiert).

Und wie Abt gerade schrieb, ist die Runtime viel mehr als nur die UI.

309 Beiträge seit 2020
vor 3 Jahren

Ein Kollege von mir hat ein Tool in Delphi geschrieben und das ist gerade einmal 4 MB groß. Als Vergleich habe ich nur mal die GUI nachgebaut und komme allein da schon auf 120 MB? Und ich habe auf meinem System kein Delphi installiert, daher muss da ja auch alles mitkommen. Kann mir das bitte jemand erklären?

Absolute .NET Grundlagen, kannst ja auch Programme in Assembler schreiben, dann sind sie noch kleiner.

H
habib Themenstarter:in
24 Beiträge seit 2020
vor 3 Jahren

Ok, das habe ich nun auch verstanden.

Das hieße also, bei kleinen Tools (so wie mein Kollege eins geschrieben hat) komme ich besser (kleinere Dateigröße) wenn ich WinForms verwende? Oder sehe ich das jetzt falsch?

16.806 Beiträge seit 2008
vor 3 Jahren

Normalerweise evaluiert man eine UI-Technologie nicht nur nach der Endgröße der Applikation.
Das ist ein völlig falscher Ansatz.

Wenn es Dir nur nach der Endgröße der Applikation geht, dann würde .NET in der ersten Runde aus der Evaluierung fliegen und stattdessen auf Programmiersprachen setzen, die sich am Ende statisch kompilieren lassen.

Man entscheidet zwischen WinForms und WPF anhand deren spezifischen Vor- und Nachteile.
Wenns Dir nur um die Größe geht, dann bist Du mit .NET falsch.