Dein Webbrowser blockiert JavaScript! Bitte aktiviere JavaScript, um sicher zu stellen, dass die Website richtig funktioniert!

Csharp Portable Programm Publish

Dieser Artikel richtet sich an alle Programmierer, die eine Portable Anwendung mit C# erstellen möchten. Die C# Portable-Anwendung muss nicht vorher installiert werden und alle notwendigen Dateien befinden sich im selben Ordner wie die .exe. Diese können dann als ZIP komprimiert werden und auf dem Zielgerät wieder entpackt werden.

An sich ist es simpel eine Portable Anwendung mit Visual Studio zu veröffentlichen, jedoch geht Visual Studio in den Grundeinstellungen für einen Publish davon aus, dass auf dem Zielgerät eine .Net-Umgebung installiert ist, also eine von dem Framework abhängige Anwendung. Es müssen für die Publish-Einstellungen kleinere Änderungen vorgenommen werden und dann funktioniert es auch wie gewollt. Das Ergebnis ist dann ein in C# geschriebenes Portable Program.

*Dieser Beitrag bezieht sich auf Visual Studio 2022 (-v 17.0.4). Getestet wurde es auch mit Visual Studio 2019 (-v 16.11.8). Alle anderen Version können von diesem Schema-X hier abweichen.

**Ich arbeite mit VS auf Englisch. Die Deutschen Bezeichnungen sind auf den Bildern, weiter unten, nicht angegeben.

***Das Beispiel ist ein C# Konsolen Anwendung und beinhaltet keine Forms oder andere grafische Elemente.

Voraussetzung

In diesem Artikel zeige ich nicht, wie ein Projekt in Visual Studio 2022 geöffnet wird, welche Pakete man braucht für z.B. eine API, etc. Es wird davon ausgegangen, dass Visual Studio bereits geöffnet ist und ein Projekt auf die Veröffentlichung wartet.

Erstellung eines Publish in Visual Studio

Im Solution Explorer mit Rechtsklick auf den Projektnamen und dann im Reiter Publish anklicken. Nach einer kurzen Ladezeit sollte ein neuer Reiter aufgehen der „: Publish“ heißt. Es gibt unterschiedliche Möglichkeiten das Programm zu veröffentlichen. Für eine Portable muss die Option Folder ausgewählt werden. Dann noch einmal Folder auswählen und Next. Im nächsten Schritt den Speicherpfad angeben. In diesem Beispiel (siehe Bilder) wird der vorgeschlagene Standardordner ausgewählt. Dann ist das Publish erstellt.

Konfiguration des Publish

Über das Stift-Symbol können die Profil-Settings aufgerufen werden. Diese sind aktuell so eingestellt, dass von einer installierten .Net Umgebung ausgegangen wird. Der Wert Target framework kann von den Screenshots abweichen, falls eine höhere oder niedrigere Net-Version als Grundlage verwendet wird. Der Deployment mode muss auf Self-contained gestellt sein. Dann kann auch eine bestimmte Target runtime ausgewählt werden, in meinem Fall für Windows 32bit (win-x86). Hinter dem weiter unten sich befindenden Pfeil-Button verbergen sich drei weitere Optionen. Produce single file sollte angehakt sein, dies sorgt dafür, dass die Anwendung und alle dazugehörigen Frameworkbestandteile in einer großen Datei zusammengefasst sind. Ebenfalls sollte die Option Enable ReadyToRun compilation aktiv sein. Mithilfe dieser Einstellung kann die Startleistung der Anwendung verbessert werden, jedoch ist die allgemeine Dateigröße dann höher, weil die Dateien IL-Code und nativen Code enthalten. Die dritte Option Trim unused code sollte auch eingeschaltet sein. Dadurch wird nicht verwendeter Code im Allgemeinen entfernt und die Dateigröße verkleinert.

Alles speichern und dann wechseln zur Main-Menü-Leiste.

Einstellung des Build Managers

In der Main-Menü-Leiste über Build -> Configuration Manger öffnen. Active solution configuration von Debug auf Release stellen und speichern. Jetzt arbeitet Visual Studio im Release Mode und nicht mehr im Entwicklungsmodus/ Debug-Mode.

Portable Publish

Wenn jetzt eine Portable mit Publish veröffentlicht wird, wird diese Portable auf einem anderen Rechner ohne .Net wahrscheinlich nicht funktionieren. Es wird noch eine Einstellung benötigt, die von Hand in die .pubxml eingetragen werden muss. Zwar ist die Anwendung jetzt „SelfContained“ und als Einzeldatei mit „PublishSingleFile“ gepackt, auch alle weiteren Einstellungen sind soweit vorhanden. Jedoch fehlt die Option „true“ und muss von Hand hinzugefügt werden. Diese Option sorgt dafür, dass wirklich alles in der, in meinem Beispiel, „myPortableProgram.exe“ vorhanden ist! Und es kann dann auch auf einem PC ausgeführt werden ohne .Net-Umgebung, wenn das richtige Zielsystem ausgewählt wurde. Es kann sein, dass die .exe-Datei dadurch noch einmal etwas größer wird, falls diese Option vorher nicht aktiv war. Wird diese Einstellung nicht hinzugefügt, stürzt die Konsolen-Anwendung ab.

Nach dem Publish liegen alle Dateien im vorher ausgewählten Zielverzeichnis. In diesem Beispiel ist das der Ordner \bin\Release\net6.0\publish. Diese Dateien alle als ZIP verpacken und auf dem Zielgerät entpacken und ausführen.

Hinweis: Im Normalfall sollte keine Warnung von Antivirus oder auch die Passworteingabe für einen lokalen Admin oder Domain Admin nötig sein. Sollte die Anwendung aber Kernelnahe Veränderungen durchführen müssen, kann es sein, dass die Anwendung aufgrund der PC-Sicherheits-Policy nicht ausgeführt werden kann.