wake-up-neo.com

Ausgabe der Konsolenanwendung in Visual Studio anstelle der Konsole

Wenn Sie eine Konsolenanwendung in Java mit Eclipse ausführen, sehe ich, dass die Ausgabe in ein Textfeld in der IDE selbst eingefügt wird, anstatt dass eine Konsole wie in Visual Studio angezeigt wird. Das ist praktisch, da ich selbst nach Beenden des Programms den darin geschriebenen Text gut nutzen kann, da er erst gelöscht wird, wenn ich ihn erneut starte. Kann man mit Visual Studio so etwas erreichen? Ich weiß das, anstatt zu tun

System.Console.WriteLine(str);

Ich kann

System.Diagnostics.Debug.WriteLine(str);

es ist jedoch nicht ganz dasselbe, da Sie im Ausgabefenster eine Menge "Junk" erhalten, da alle geladenen Symbole und so.

Ist es sogar noch besser möglich, alles in der IDE selbst erledigen zu lassen, wenn Sie Ihre Anwendung ausführen, anstatt die Konsole laufen zu lassen?

100

Klicken Sie im Extras -> Visual Studio-Dialogfeld "Optionen" -> Debugging -> Überprüfen Sie den Text "Alle Ausgabefenster in das Direktfenster umleiten".

37
SharpSteve

Im Visual Studio Options-Dialog -> Debugging -> Markieren Sie "Text aller Ausgabefenster in das Direktfenster umleiten". Gehen Sie dann zu Ihren Projekteinstellungen und ändern Sie den Typ von "Konsolenanwendung" in "Windows-Anwendung". Zu diesem Zeitpunkt öffnet Visual Studio kein Konsolenfenster mehr, und die Ausgabe wird in Visual Studio an das Ausgabefenster umgeleitet. Sie können jedoch nichts "kreatives" machen, z. B. das Anfordern von Schlüssel- oder Texteingaben oder das Löschen der Konsole. Sie erhalten Laufzeitausnahmen.

39
stolsvik

Verwenden Sie System.Diagnostics.Trace

Abhängig davon, welche Listener Sie anhängen, kann die Ablaufverfolgungsausgabe an das Debug-Fenster, an die Konsole, an eine Datei, an eine Datenbank oder an alle gleichzeitig gesendet werden. Die Möglichkeiten sind buchstäblich endlos, da die Implementierung Ihres eigenen TraceListener extrem einfach ist.

4
Joel Coehoorn

Stellen Sie sicher, dass das Kontrollkästchen "Redirect All Output ..." in den Debugging-Einstellfenstern aktiviert ist:

 Make sure the check the "**Redirect All Output...**" checkbox in the debugging setting windows:

3
3
vittore

Sie können eine Wrapper-Anwendung erstellen, die Sie ausführen, anstatt Ihre echte App direkt auszuführen. Die Wrapper-Anwendung kann stdout abhören und alles an Trace weiterleiten. Ändern Sie anschließend die Laufeinstellungen, um den Wrapper zu starten, und übergeben Sie den Pfad an die echte App, die ausgeführt werden soll.

Sie können den Wrapper auch automatisch an den neuen Prozess anhängen, wenn ein Debugger an den Wrapper angehängt ist.

1
Samuel Neff

Es ist Zeit, die neuesten Versionen für Visual Studio zu überprüfen. Die am meisten vorgeschlagene Lösung, die zuvor bei einigen von Ihnen nicht funktioniert hat, könnte jetzt funktionieren. 

In Visual Studio 2017 (Release Version 15.4.2 und höher) hat es sich für mich als Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Window herausgestellt. 

Einige Anmerkungen: 1. Stellen Sie sicher, dass Sie sich im Debugging-Modus befinden, um das Direktfenster anzuzeigen. 2. Es sollten jetzt 3 weitere Debugging-Tools zur Verfügung stehen, nämlich Call Stack, Breakpoints und Command Window (siehe unten):

 enter image description here

Schöne Grüße!

0
kuzevni

Eine einfache Lösung, die für mich funktioniert, um mit der Konsolenfähigkeit (ReadKey, String mit Format und arg usw.) zu arbeiten und die Ausgabe zu sehen und zu speichern: 

Ich schreibe TextWriter, der in Console und in Trace schreibt und den Console.Out damit ersetzt. 

wenn Sie Dialog -> Debugging verwenden -> "Alle Textfenster des Ausgabefensters zum Direktfenster umleiten" aktivieren, erhalten Sie es im Direktfenster und ziemlich sauber.

mein Code: am Anfang meines Codes:

   Console.SetOut(new TextHelper());

und die Klasse: 

public class TextHelper : TextWriter
    {
        TextWriter console;

        public TextHelper() {
            console = Console.Out;
        }

        public override Encoding Encoding { get { return this.console.Encoding; } }
        public override void WriteLine(string format, params object[] arg)
        {
            string s = string.Format(format, arg);
            WriteLine(s);
        }
        public override void Write(object value)
        {
            console.Write(value);
            System.Diagnostics.Trace.Write(value);
        }

        public override void WriteLine(object value)
        {
            Write(value);
            Write("\n");
        }
        public override void WriteLine(string value)
        {
            console.WriteLine(value);
            System.Diagnostics.Trace.WriteLine(value);

        }

    }

Hinweis: Ich überschreibe genau das, was ich brauchte. Wenn Sie also andere Typen schreiben, sollten Sie mehr überschreiben

0

Stattdessen können Sie die Ausgabe in einem Testergebnis sammeln.

Sie können keine Eingabe bereitstellen, Sie können jedoch problemlos mehrere Tests mit unterschiedlichen Befehlszeilenargumenten bereitstellen, wobei jeder Test die Ausgabe erfasst.

Wenn Ihr Ziel das Debuggen ist, ist dies ein Weg, um ein wiederholbares Debugging-Szenario mit geringem Aufwand bereitzustellen.

namespace Commandline.Test
{
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]
    public class CommandlineTests
    {
        [TestMethod]
        public void RunNoArguments()
        {
            Commandline.Program.Main(new string[0]);
        }
    }
}
0
uffehellum

Ich weiß, dass dies nur eine weitere Antwort ist, aber ich dachte, ich würde etwas für die neuen Web-Entwickler aufschreiben, die sich über den Teil "Change to a Windows Application" verwirren könnten, weil ich standardmäßig eine MVC-Anwendung in Visual Studio 2013 denke Der Standardwert ist ein Ausgabetyp der Klassenbibliothek. 

Meine Webanwendung ist standardmäßig als Ausgabetyp "Klassenbibliothek" festgelegt. Das musst du nicht ändern. Ich musste lediglich den Vorschlägen folgen, indem Sie auf Tools> Optionen> Debugging> Den gesamten Text des Ausgabefensters in das Direktfenster umleiten. Ich habe dann oben den System.Diagnostics.Trace-Vorschlag von Joel Coehoorn verwendet. 

0
joshmcode