console de redirecionamento para Visual janela de saída de depuração Estúdio em app.config

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu quero começar meus comandos Console.WriteLine() a aparecer em minha janela "Output" com minhas declarações Debug.WriteLine(). Eu acho que eu descobri como fazer isso uma vez, mas eu não me lembro / encontrar no google como fazê-lo novamente. Eu me lembro de ser capaz de fazer isso no arquivo app.config.

I encontrar muitas instruções sobre como obter console e depuração declarações para aparecer na saída do console, mas não sabe como obtê-los para aparecer na janela "Output".

É possível?

Foi útil?

Solução

Basicamente a maioria simples olhares solução como esta.

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

E você deve adicionar esta linha para a inicialização do programa:

Console.SetOut(new ToDebugWriter());

Outras dicas

@ de Avram resposta tem trabalhado para mim, exceto que a única sobrecarga em seu código não foi o que log4net de ConsoleAppender estava usando no meu sistema. (Estou interessado em Console.SetOut tão saídas ConsoleAppender desse log4net para o painel de saída do Visual Studio "Debug".) Então eu cancelou todos os métodos StringWriter e Write de WriteLine aceitar string, object, char[], etc. no pressuposto de que um ou mais destes foi o que ConsoleAppender estava chamando via Console.

Este conseguiu, e log4net log aparece agora no meu painel "Debug".

Estou incluindo o código abaixo para o benefício de qualquer pessoa com objetivos semelhantes. (Para ser totalmente seguro, pode-se substituir os restantes métodos StringWriter.Write e .WriteLine.) Eu removi as chamadas para base porque eles parecem ser desnecessários, e eu acho que eles só construir um dentro StringWriter grande buffer (normalmente acessado através dessa Classe .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);
        }
    }
}

Se você pode se apossar do fluxo para a janela de saída você pode usar Console.SetOut () para redirecionar para ele. No entanto, esta abordagem não parece ser possível.

System.Debug saídas a cada < a href = "http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.aspx" rel = "nofollow noreferrer"> TraceListener em sua TraceListenerCollection . Há apenas um TraceListener registrado inicialmente que é a DefaultTraceListener . Não faz uso de um objeto de fluxo e em vez disso usa métodos nativos para a saída.

Uma abordagem que usa a API do Visual Studio é provavelmente o caminho a percorrer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top