Frage

Ich mag meine Console.WriteLine() Befehle erhalten in meinem Fenster „Ausgabe“ mit meiner Debug.WriteLine() Aussage erscheinen. Ich glaube, ich herausgefunden, wie dies einmal zu tun, aber ich kann mich nicht erinnern, / finde auf Google, wie es wieder zu tun. Ich scheine in der Lage, dies zu tun in der app.config Datei zu erinnern.

Ich finde viele Anweisungen, wie Konsole und Debug erhalten Anweisungen in der Ausgabe der Konsole erscheinen, aber nicht, wie sie in den „Output“ Fenstern angezeigt bekommen.

Ist es möglich?

War es hilfreich?

Lösung

Grundsätzlich ist die einfachste Lösung sieht wie folgt aus.

public class ToDebugWriter : StringWriter
{
    public override void WriteLine(string value)
    {
        Debug.WriteLine(value);
        base.WriteLine(value);
    }
}

Und Sie müssen diese Zeilen auf die Initialisierung des Programms hinzu:

Console.SetOut(new ToDebugWriter());

Andere Tipps

@ Avrams Antwort für mich gearbeitet hat, mit der Ausnahme, dass die einzige Überlastung in seinem Code war nicht derjenige, der log4net ConsoleAppender wurde mit auf meinem System. (Ich bin in Console.SetOut interessiert, so dass log4net der ConsoleAppender Ausgänge zu Visual Studio „Debug“ Ausgabebereich.) Also ich overrode alle StringWriter des Write und WriteLine Methoden akzeptieren string, object, char[] usw. auf der Annahme, dass ein oder mehr von diesen war das, was ConsoleAppender wurde über Console aufrufen.

Dies gelang, und log4net Protokollierung erscheint jetzt in meinem „Debug“ angezeigt.

Ich bin auch den Code für den Nutzen von jedermann mit ähnlichen Zielen. (Um ganz sicher zu sein, könnte man die restlichen StringWriter.Write und .WriteLine Methoden außer Kraft.) Ich die Anrufe entfernt habe, um base, weil sie scheinen überflüssig zu sein, und ich denke, dass sie nur einen großen Puffer innerhalb StringWriter aufbauen (in der Regel über diese Klasse zugegriffen .ToString().)

namespace GeneralLibrary.Logging
{
    using System.Diagnostics;
    using System.IO;

    public class DebugWriter : StringWriter
    {
        public override void Write(string format, object arg0)
        {
            Debug.Write(string.Format(format, arg0));
        }

        public override void Write(string format, object arg0, object arg1)
        {
            Debug.Write(string.Format(format, arg0, arg1));
        }

        public override void Write(string format, object arg0, object arg1, object arg2)
        {
            Debug.Write(string.Format(format, arg0, arg1, arg2));
        }

        public override void Write(string format, params object[] arg)
        {
            Debug.Write(string.Format(format, arg));
        }

        public override void Write(object value)
        {
            Debug.Write(value);
        }

        public override void Write(string value)
        {
            Debug.Write(value);
        }

        public override void Write(char[] buffer)
        {
            Debug.Write(buffer);
        }

        public override void Write(char[] buffer, int index, int count)
        {
            Debug.Write(new string(buffer, index, count));
        }

        public override void WriteLine(string value)
        {
            Debug.WriteLine(value);
        }

        public override void WriteLine(object value)
        {
            Debug.WriteLine(value);
        }

        public override void WriteLine(string format, object arg0)
        {
            Debug.WriteLine(format, arg0);
        }

        public override void WriteLine(string format, object arg0, object arg1)
        {
            Debug.WriteLine(format, arg0, arg1);
        }

        public override void WriteLine(string format, object arg0, object arg1, object arg2)
        {
            Debug.WriteLine(format, arg0, arg1, arg2);
        }

        public override void WriteLine(string format, params object[] arg)
        {
            Debug.WriteLine(format, arg);
        }

        public override void WriteLine(char[] buffer)
        {
            Debug.WriteLine(buffer);
        }

        public override void WriteLine(char[] buffer, int index, int count)
        {
            Debug.WriteLine(new string(buffer, index, count));
        }

        public override void WriteLine()
        {
            Debug.WriteLine(string.Empty);
        }
    }
}

Wenn Sie halten den Strom für das Ausgabefenster bekommen können, können Sie a href = verwenden < „http://msdn.microsoft.com/en-us/library/system.console.setout.aspx“ rel =“ nofollow noreferrer "> Console.SetOut () , um es umzuleiten. Doch dieser Ansatz scheint nicht möglich zu sein.

System.Debug Ausgänge zu jedem < a href = "http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.aspx" rel = "nofollow noreferrer"> Tracelistener in seinem TraceListenerCollection . Es gibt nur einen Tracelistener zunächst registriert, die die Default . Dabei spielt es keine Verwendung eines Stream-Objekt machen und verwendet stattdessen native Methoden für die Ausgabe.

Ein Ansatz, der das Visual Studio-API verwendet, ist wahrscheinlich der Weg zu gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top