C# Console App Dateien in eine einzelne exe Datei Kompilieren?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Build -> Publish... -> Folder

Dann bei "Show all settings" unter "File publish options" den Haken bei "Produce single file" rein machen.

so sollten nur noch native DLLs und die debug symbols (.pdb) im output order übrig bleiben

Die debug symbols kannst du entweder einfach löschen oder bei deinem Projekt properties unter "Build" bei "Debug Symbols" durch Wählen von "No files are emitted" oder "Embedded in DLL/EXE" los werden

man kann sicherlich auch irgendwie die nativen DLLs in die exe mit einbetten aber da musst du selber mal recherchieren.

wenn du die ganzen einstellungen vorgenommen hast musst du das ganze nur noch publishen.

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler, B. Sc. Informatik

Nutzer4596 
Fragesteller
 02.01.2023, 01:58

Danke hat geklappt. Die pdb datei die noch mit generiert wird kann ich doch auch einfach im Ordner lassen oder löschen oder nicht? Und was genau macht "Enable ReadyToRun compilation"?

1
Palladin007  02.01.2023, 02:44
@Nutzer4596
Die pdb datei die noch mit generiert wird kann ich doch auch einfach im Ordner lassen oder löschen oder nicht?

Die sind nur für Debugging und generelle Fehlersuche relevant, brauchst Du also nicht.
Aber wenn jemand einen Fehler meldet und dir nur den Exception-Text gibt, dann bist Du froh, wenn die PDBs dabei waren ;)

Ich persönlich würde sie immer mit dabei lassen - tut nicht weh und Du bist froh, wenn Du sie brauchst.

Und was genau macht "Enable ReadyToRun compilation"

Das nimmt dem JIT-Compiler Arbeit ab, indem es den IL-Code voraus kompiliert - zumindest teilweise. Macht den Start etwas schneller, kann aber zur Laufzeit etwas Performance kosten und natürlich gibt es noch mehr Nachteile.
Solange Du das nicht brauchst, lass es aus.

https://learn.microsoft.com/en-us/dotnet/core/deploying/ready-to-run

1
Palladin007  02.01.2023, 02:32
man kann sicherlich auch irgendwie die nativen DLLs in die exe mit einbetten

Kommt drauf an

Wenn es eigene native DLLs sind, kann man sie einfach als embedded Resource mit bringen und beim Start unter Temp entpacken und nutzen. Ist auch kein Hexenwerk, muss man aber selber programmieren.

Wenn die nativen DLLs durch eine Abhängigkeit kommen, hängt das von der Abhängigkeit ab. Da diese DLLs aber meistens erst gesucht und genutzt werden, wenn entsprechender Code aufgerufen wird, würde es auch hier reichen, sie als embedded Resource mit zu bringen und unter Temp zu entpacken. Kann aber sein, dass man dafür den Build-Prozess etwas anpassen muss.

Wenn man die Publish-Option self-contained nutzt, dann liegen noch die von der Runtime benötigten Dateien daneben und die kriegst Du nicht weg.

1