将控制台重定向到app.config中的Visual Studio调试输出窗口

时间:2009-09-10 22:03:57

标签: visual-studio console-application

我希望我的Console.WriteLine()命令显示在我的“输出”窗口中,并显示Debug.WriteLine()个语句。我想我曾经想过如何做到这一点,但我不记得/在谷歌上找到如何再做一次。我似乎记得能够在app.config文件中执行此操作。

我找到了很多关于如何让控制台和调试语句出现在控制台输出中的说明,但没有找到如何让它们出现在“输出”窗口中的说明。

有可能吗?

3 个答案:

答案 0 :(得分:19)

基本上最简单的解决方案就是这样。

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

您必须将此行添加到程序的初始化中:

Console.SetOut(new ToDebugWriter());

答案 1 :(得分:3)

@Avram's answer对我有用,除了他的代码中的单个重载不是log4net的ConsoleAppender在我的系统上使用的那个。 (我对Console.SetOut感兴趣,以便log4net的ConsoleAppender输出到Visual Studio的“Debug”输出窗格。)所以我覆盖了所有StringWriter的{​​{1}}和{{} 1}}接受WriteWriteLinestring等的方法,假设其中一个或多个是object通过char[]调用的内容。

此操作成功,log4net日志记录现在出现在我的“调试”窗格中。

我将以下代码包含在内,以便为具有类似目标的任何人提供帮助。 (为了完全安全,可以覆盖剩余的ConsoleAppenderConsole方法。)我删除了对StringWriter.Write的调用,因为它们似乎没必要,我认为它们只是构建在.WriteLine内建立一个大缓冲区(通常通过该类的base访问。)

StringWriter

答案 2 :(得分:1)

如果您可以获取输出窗口的流,则可以使用Console.SetOut()重定向到该输出窗口。然而,这种方法似乎不可能。

System.Debug输出到其TraceListener中的每个TraceListenerCollection。最初只注册了一个TraceListener,即DefaultTraceListener。它不使用流对象,而是使用本机方法进行输出。

使用Visual Studio API的方法可能就是这样。