Laden...

Konsolenanwendung braucht mehr als *.exe Datei

Erstellt von Holgie vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.243 Views
H
Holgie Themenstarter:in
16 Beiträge seit 2005
vor 2 Jahren
Konsolenanwendung braucht mehr als *.exe Datei

Hallo zusammen,

seit Jahren hab ich nichts mehr mit C# gemacht, nun musste ich mal wieder. Das Programm läuft, aber die Weitergabe gestaltet sich als schwierig: Ich habe eine Konsolenanwendung geschrieben welche Daten aus einem *.csv File extrahiert und diese umwandelt zu Batchkommandos und diese in eine Zieldatei schreibt. Klappt problemlos.
Ich kompiliere sie als "Release" damit ich die exe weitergeben kann. Nehme ich diese Release-exe nun, ist sie alleine nicht lauffähig? Diese benötigt noch eine extra dll sowie einige JSON-Files. Starte ich nur die exe, bekomme ich als Fehlermeldung:


The application to execute does not exist: 'C:\Users\XXX\Desktop\CreateVolckBatch.dll'.

Packe ich ihm diese DLL dazu, fängt er an JSON Files zu monieren:


Cannot use file stream for [C:\Users\XXX\Desktop\CreateVolckBatch.deps.json]: No such file or directory
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet\'.
Failed to run as a self-contained app.
  - The application was run as a self-contained app because 'C:\Users\xxx\Desktop\CreateVolckBatch.runtimeconfig.json' was not found.
  - If this should be a framework-dependent app, add the 'C:\Users\xxx\Desktop\CreateVolckBatch.runtimeconfig.json' file and specify the appropriate framework.

Ich kannte es noch aus alten VS-Versionen, das eine Konsolenanwendung ohne viel drumherum (nur System.IO ist zusätzlich eingebunden) direkt lauffähig ist.
Preisfrage ist nun: Ist das eine Einstellung im Visual Studio und wo kann ich das einstellen?

Die VS Version ist: Microsoft Visual Studio Professional 2019

Danke schonmal für eure Ideen / Hinweise!

T
2.224 Beiträge seit 2008
vor 2 Jahren

Die .exe allein reicht auch nicht, wenn du Abhängigkeiten zu anderen Libs (DLLs) hast.
Du musst auch alles aus dem Release Ordner bereitstellen.

Ebenfalls hat .NET mit .NET Core und später .NET 5 auch einen großen Umbruch durchlebt.
Das alte Framework wird nicht mehr weiterentwickelt, jetzt gibt es .NET Core/5+ als kompaktere Laufzeitumgebung.
Dort kannst du aber auch die Anwendungen "statisch" kompilieren, damit keine extra Laufzeit installiert werden muss.
Hier müsstest du schauen welche Konsolenanwendung du hast.
Du kannst bei den Projekten in VS 2019 schon zwischen .NET Framework und .NET Code/5 Konsolenanwendungen auswählen.
Steht dann auch in den Projekt Eigenschaften.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

2.080 Beiträge seit 2012
vor 2 Jahren

Heute gibt's .NET 5 mit quasi neu entwickelter Runtime, da hat sich eben einiges getan - zum Positiven.

Prinzipiell solltest Du aber nicht einfach den Inhalt des Debug- oder Release-Ordners aus dem bin-Verzeichnis nehmen.
Für das, was Du machen willst, gibt es die Publish-Funktion (Rechtsklick auf das Projekt), da kannst Du mehrere Publish-Profile erstellen, z.B. eines für das Datei-System. Visual Studio erstellt dann das Programm und bereitet alles in dem eingestellten Ordner vor und alles, was da drin ist, brauchst Du dann auch.

Man kann das aber noch weiter einstellen, z.B. kannst Du Runtime und Framework selber mit liefern (self contained) oder alle managed DLLs zusammenfassen (single file) und wenn Du PDBs nicht haben willst, kann man die auch deaktivieren und so weiter.

Ganz vermeiden kann man andere Dateien aber nie, daher merke dir die Grundregel:
Alles, was in deinem publish-Ordner liegt, muss auch weitergegeben werden.
Wenn Du einzelne Dateien nicht haben willst, schau, ob es Funktionen gibt, die nicht dort abzulegen.
Wenn das nicht geht, werden sie eben benötigt.

Veröffentlichen einer .NET-Konsolenanwendung mit Visual Studio - .NET

PS @T-Virus:

Die .exe allein reicht auch nicht, wenn du Abhängigkeiten zu anderen Libs (DLLs) hast.

In dem Fall ist das wahrscheinlich keine extra Abhängigkeit, sondern das Programm selber, das ja nur noch in DLLs liegt - die exe startet dann nur noch.
Daher vermutlich auch die Verwirrung - welche Abhängigkeit sollte man auch ohne Abhängigkeiten brauchen? ^^

Du kannst bei den Projekten in VS 2019 schon zwischen .NET Framework und .NET Code/5 Konsolenanwendungen auswählen.

Was man allerdings nicht tun sollte! Außer man hat Abhängigkeiten, die nur mit dem alten Framework laufen.
Wenn man das freiwillig macht, verschenkt man freiwillig viele Vorteile und Verbesserungen und kettet sich freiwillig an ein altes System.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

T
2.224 Beiträge seit 2008
vor 2 Jahren

@Palladin007
Der Hinweis mit der Auswahl ging mir darum, dass je nachdem was er ausgewählt hat auch noch das Framework beim Endanwender benötigt.
Aber ist natürlich richtig, sollte man nur noch nehmen wenn nötig uns sonst aust .NET 5+ setzen!

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

H
Holgie Themenstarter:in
16 Beiträge seit 2005
vor 2 Jahren

Wow, das ging ja fix.

Danke euch, über Veröffentlichen konnte ich das in einer exe zusammenführen 🙂

2.080 Beiträge seit 2012
vor 2 Jahren

Der Hinweis mit der Auswahl ging mir darum, dass je nachdem was er ausgewählt hat auch noch das Framework beim Endanwender benötigt.
Aber ist natürlich richtig, sollte man nur noch nehmen wenn nötig uns sonst aust .NET 5+ setzen!

Das war auch nicht als Kritik an dich gemeint 🙂
Es sollte mehr ein Hinweis sein, da Viele lieber den augenscheinlich einfacheren Weg gehen (weil "kenn ich ja"), sich dabei aber nur noch mehr Probleme aufhalsen.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.