在Visual Studio中输出控制台应用程序而不是控制台

在Eclipse中使用Java进行控制台应用程序时,我看到输出被放置在IDE本身的文本框中,而不是像在Visual Studio中那样popup一个控制台。 这一点很方便,即使程序退出后,我仍然可以很好地使用写入的文本,因为它不会被擦除,直到我再次运行。 有没有可能实现像Visual Studio那样的东西? 我知道,而不是做

System.Console.WriteLine(str); 

我可以

 System.Diagnostics.Debug.WriteLine(str); 

但并不完全相同,因为在输出窗口中会出现很多“垃圾”,就像所有加载的符号等一样。

更妙的是,当你运行你的应用程序时,是否有可能在IDE中完成所有的工作,而不是让控制台运行?

在Visual Studio选项对话框 – >debugging – >检查“redirect所有输出窗口文本到立即窗口”。

Visual Studio选项对话框 – >debugging – >检查“redirect所有输出窗口文本到立即窗口”。 然后转到您的项目设置,并将types从“控制台应用程序”更改为“Windows应用程序”。 此时,Visual Studio不再打开控制台窗口,并将输出redirect到Visual Studio中的“输出”窗口。 然而,你不能做任何“创造性”的事情,比如请求键或文本input,或者清除控制台 – 你会得到运行时exception。

使用System.Diagnostics.Trace

根据附加的监听器,跟踪输出可以进入debugging窗口,控制台,文件,数据库或一次全部。 实现你自己的TraceListener非常简单,可能性是无止境的。

你可以创build一个你运行的包装应用程序,而不是直接运行你的真实应用程序。 包装器应用程序可以侦听标准输出并将所有内容redirect到跟踪。 然后改变运行设置来启动你的包装,并传递到真正的应用程序的path运行。

如果debugging器连接到包装器,您也可以让包装器自动将debugging器附加到新的过程。

这不完全相同,但请阅读博客文章您是否知道…您可以在输出窗口中显示外部工具的文本? – #204

确保在debugging设置窗口中选中“ redirect所有输出… ”checkbox:

确保在调试设置窗口中选中“**重定向所有输出... **”复选框:

我知道这只是另一个答案,但我想我会写下一些新的Web开发人员,他们可能会对“更改为Windows应用程序”部分感到困惑,因为我认为默认情况下,Visual Studio 2013中的MVC应用程序默认为输出types的类库。

我的Web应用程序默认设置为“类库”的输出types。 你不必改变这一点。 我所要做的就是按照build议转到工具>选项>debugging>将所有输出窗口文本redirect到立即窗口。 然后我使用上面的Joel Coehoorn的System.Diagnostics.Tracebuild议。

相反,您可以收集testing结果中的输出。

您不能提供input,但可以使用不同的命令行参数轻松提供多个testing,每个testing都会收集输出。

如果您的目标是debugging,这是提供可重复debugging场景的低效方式。

 namespace Commandline.Test { using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class CommandlineTests { [TestMethod] public void RunNoArguments() { Commandline.Program.Main(new string[0]); } } }