Redirigir la consola a la ventana de resultados de depuración de Visual Studio en app.config

StackOverflow https://stackoverflow.com/questions/1407974

  •  05-07-2019
  •  | 
  •  

Pregunta

Quiero que aparezcan mis comandos Console.WriteLine () en mi " Salida " ventana con mis declaraciones Debug.WriteLine () . Creo que descubrí cómo hacerlo una vez, pero no puedo recordar / encontrar en Google cómo hacerlo de nuevo. Parece que recuerdo haber podido hacer esto en el archivo app.config .

Encuentro muchas instrucciones sobre cómo obtener las declaraciones de consola y depuración para que aparezcan en la salida de la Consola, pero no cómo hacer que aparezcan en la sección " Salida " ventana.

¿Es posible?

¿Fue útil?

Solución

Básicamente, la solución más simple se ve así.

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

Y debe agregar esta línea a la inicialización del programa:

Console.SetOut(new ToDebugWriter());

Otros consejos

@ La respuesta de Avram ha funcionado para mí, excepto que la única sobrecarga en su código no fue la que log4net ConsoleAppender estaba usando en mi sistema. (Estoy interesado en Console.SetOut para que ConsoleAppender de log4net salga al panel de salida " Debug " Debug de Visual Studio). Los métodos de Write y WriteLine de 'code>' string , object , char [] , etc. en el supuesto de que uno o más de estos era lo que ConsoleAppender llamaba a través de Console .

Esto tuvo éxito, y el registro log4net ahora aparece en mi " Debug " cristal.

Incluyo el siguiente código para el beneficio de cualquier persona con objetivos similares. (Para estar completamente a salvo, se podrían anular los métodos StringWriter.Write y .WriteLine restantes.) He eliminado las llamadas a base porque parecen ser innecesarios, y creo que simplemente crean un gran búfer dentro de StringWriter (generalmente se accede a través del .ToString () de esa clase).

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);
        }
    }
}

Si puede controlar la transmisión de la ventana de salida, puede usar Console.SetOut () para redirigirlo. Sin embargo, este enfoque no parece ser posible.

System.Debug da salida a cada < a href = "http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.aspx" rel = "nofollow noreferrer"> TraceListener en su TraceListenerCollection . Inicialmente, solo hay un TraceListener registrado que es DefaultTraceListener . No hace uso de un objeto de flujo y en su lugar utiliza métodos nativos para la salida.

Un enfoque que utiliza la API de Visual Studio es probablemente el camino a seguir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top