web-dev-qa-db-ger.com

Kompilieren Sie in Visual Studio eine eigenständige ausführbare Datei (.exe)

wie kann ich ein eigenständiges Exe in Visual Studio erstellen? Es ist nur eine einfache Konsolenanwendung, die meiner Meinung nach keine kleine Konsolenanwendung installieren möchte. Ich habe eine einfache CPP-Datei mit dem visuellen Studio-Befehl Prompt kompiliert. Funktioniert das exe auch, wenn das .NET Framework nicht installiert ist? Ich habe nativen C++ - Code verwendet.

35
Mohit Deshpande

Alles, was die verwaltete Umgebung verwendet (dazu gehören alle in C # und VB.NET geschriebenen), erfordert das .NET-Framework. Sie können Ihre .EXE in diesem Szenario einfach weiterverteilen, sie müssen jedoch das entsprechende Framework installieren, wenn sie noch nicht vorhanden sind.

19
Joe

In Ihrem Projektordner befindet sich ein Ordner. In Ihrem bin-Ordner befinden sich zwei Ordner, ein Release und ein Debug. Für Ihre polierte EXE-Datei möchten Sie in Ihren Release-Ordner wechseln.

Ich bin nicht ganz sicher, ob Sie danach gefragt werden

55
Marlon

Wenn ich Sie richtig verstehe, können Sie dies ja tun, aber nicht unter Visual Studio (von dem, was ich weiß). Um den Compiler zu zwingen, eine echte, eigenständige ausführbare Datei zu generieren (dh Sie verwenden C # wie jede andere Sprache), verwenden Sie die Programm mkbundle (im Lieferumfang von Mono enthalten). Dadurch wird Ihre C # -App zu einer echten, nicht abhängigen ausführbaren Datei.

Im Internet gibt es viele falsche Vorstellungen. Es besiegt nicht den Zweck des .NET-Frameworks, wie manche Leute behaupten, denn wie können Sie zukünftige Features des .NET-Frameworks verlieren, wenn Sie diese Features noch nicht verwendet haben? Wenn Sie Aktualisierungen an Ihre App senden, ist es nicht gerade schwer, sie vor dem Erstellen des Installationsprogramms über den mkbundle-Prozessor auszuführen. Es gibt auch einen Geschwindigkeitsvorteil, der dazu führt, dass Ihre App in nativer Geschwindigkeit ausgeführt wird (weil sie jetzt IS native ist).

In C++ oder Delphi haben Sie dasselbe System, jedoch ohne die mittlere MSIL-Schicht. Wenn Sie also einen Namespace oder eine Quelldatei (in Delphi als Unit bezeichnet) verwenden, wird diese kompiliert und in Ihre letzte Binärdatei aufgenommen. Ihre letzte Binärdatei wird also größer (Lesen Sie: "Normal" für eine echte App). Gleiches gilt für die Teile des Frameworks, die Sie in .net verwenden. Diese sind auch in Ihrer App enthalten. Smart Linking reduziert jedoch einen erheblichen Betrag.

Ich hoffe es hilft!

19

Ich stimme @ Marlon zu. Wenn Sie Ihr C # -Projekt mit der Release-Konfiguration kompilieren, finden Sie im Ordner "bin/Release" Ihres Projekts die ausführbare Datei Ihrer Anwendung. Dies sollte für eine einfache Anwendung funktionieren.

Wenn Ihre Anwendung jedoch Abhängigkeiten zu einer externen DLL hat, empfehle ich Ihnen, ein SetupProject mit VisualStudio zu erstellen. Auf diese Weise sucht der Projektassistent alle Abhängigkeiten Ihrer Anwendung und fügt sie (die Bibliotheken) dem Installationsordner hinzu. Zum Schluss müssen Sie nur noch das Setup auf dem Computer des Benutzers ausführen und Ihre Software installieren.

Ich hatte noch nie Probleme mit der Implementierung einer kleinen Konsolenanwendung, die in C # erstellt wurde. Das einzige Problem, auf das Sie stoßen können, wäre eine Abhängigkeit vom .NET-Framework, aber selbst dies sollte kein großes Problem sein. Sie können die Version 2.0 des Frameworks ausprobieren, die auf den meisten PCs bereits vorhanden sein sollte.

Bei der Verwendung von nativem, nicht verwaltetem C++ sollten Sie keine Abhängigkeiten vom .NET-Framework haben. Daher sollten Sie wirklich sicher sein. Besorgen Sie sich einfach die ausführbare Datei und die zugehörigen Dateien (sofern vorhanden) und stellen Sie sie so wie sie sind. Sie müssen sie nicht installieren, wenn Sie dies nicht möchten.

1
alex

Sie können alle DLLs in Ihre Haupt-DLL einbetten. Siehe: Einbetten von DLLs in eine kompilierte ausführbare Datei

Ich glaube nicht, dass es möglich ist, das zu tun, was der Fragesteller fragt, dll hölle zu vermeiden, indem alle Projektdateien in einer .exe-Datei zusammengeführt werden.

Das Rahmenproblem ist ein roter Hering. Das Problem, das auftritt, besteht darin, dass es bei mehreren Projekten, die von einer Bibliothek abhängig sind, ein PITA ist, um die Bibliotheken synchron zu halten. Jedes Mal, wenn sich die Bibliothek ändert, sterben alle .exes, die davon abhängen und nicht aktualisiert werden, auf schreckliche Weise.

Den Leuten zu sagen, C als eine Antwort zu lernen, ist arrogant und ignorant.

0
PHB