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

时间:2010-03-30 02:57:02

标签: c# visual-studio console

使用Eclipse在Java中执行控制台应用程序时,我看到输出放在IDE本身的文本框中,而不是像Visual Studio中那样弹出控制台。这很方便,因为即使在程序退出之后,我仍然可以很好地利用其中所写的文本,因为它在我再次运行之前不会被删除。是否可以使用Visual Studio实现类似的功能?我知道而不是做

System.Console.WriteLine(str);

我能做到

System.Diagnostics.Debug.WriteLine(str);

但是它不是一回事,因为你在输出窗口中得到了很多“垃圾”,就像所有加载的符号一样。

更好的是,当您运行应用程序而不是让控制台运行时,是否可以在IDE中完成所有操作?

15 个答案:

答案 0 :(得分:42)

在工具中 - > Visual Studio选项对话框 - >调试 - >选中“将所有输出窗口文本重定向到立即窗口”。

答案 1 :(得分:39)

Visual Studio 选项对话框中 - >调试 - >选中“将所有输出窗口文本重定向到立即窗口”。然后转到项目设置并将类型从“控制台应用程序”更改为“Windows应用程序”。此时,Visual Studio不再打开控制台窗口,输出将重定向到Visual Studio中的“输出”窗口。但是,您无法执行任何“创造性”操作,例如请求键或文本输入,或清除控制台 - 您将获得运行时异常。

答案 2 :(得分:5)

使用System.Diagnostics.Trace

根据您附加的侦听器,跟踪输出可以一次转到调试窗口,控制台,文件,数据库或所有内容。可能性实际上是无穷无尽的,因为实现自己的TraceListener非常简单。

答案 3 :(得分:3)

答案 4 :(得分:3)

确保选中" 重定向所有输出... "调试设置窗口中的复选框:

Make sure the check the "**Redirect All Output...**" checkbox in the debugging setting windows:

答案 5 :(得分:1)

您可以创建一个运行的包装器应用程序,而不是直接运行您的真实应用程序。包装器应用程序可以侦听stdout并将所有内容重定向到Trace。然后更改运行设置以启动包装器并将路径传递给要运行的真实应用程序。

如果将调试器附加到包装器,您也可以让包装器将调试器自动附加到新进程。

答案 6 :(得分:0)

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

默认情况下,我的Web应用程序被设置为“类库”的输出类型。你不必改变它。我所要做的就是遵循工具>的建议。选项>调试>将所有输出窗口文本重定向到立即窗口。然后我使用了Joel Coehoorn的System.Diagnostics.Trace建议。

答案 7 :(得分:0)

相反,您可以在测试结果中收集输出。

您无法提供输入,但您可以轻松地使用不同的命令行参数提供多个测试,每个测试都会收集输出。

如果你的目标是调试,这是一种提供可重复调试方案的低成本方法。

namespace Commandline.Test
{
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]
    public class CommandlineTests
    {
        [TestMethod]
        public void RunNoArguments()
        {
            Commandline.Program.Main(new string[0]);
        }
    }
}

答案 8 :(得分:0)

一个对我有用的简单解决方案,可以使用控制台功能(ReadKey,带Format的String和arg等)并查看和保存输出:

我写了TextWriter,它写入ConsoleTrace并用它替换Console.Out

如果使用对话框->调试->选中“将所有输出窗口文本重定向到立即窗口”,则可以在立即窗口中获得它,并且非常干净。

我的代码: 在我的代码开头:

   Console.SetOut(new TextHelper());

和班级:

public class TextHelper : TextWriter
    {
        TextWriter console;

        public TextHelper() {
            console = Console.Out;
        }

        public override Encoding Encoding { get { return this.console.Encoding; } }
        public override void WriteLine(string format, params object[] arg)
        {
            string s = string.Format(format, arg);
            WriteLine(s);
        }
        public override void Write(object value)
        {
            console.Write(value);
            System.Diagnostics.Trace.Write(value);
        }

        public override void WriteLine(object value)
        {
            Write(value);
            Write("\n");
        }
        public override void WriteLine(string value)
        {
            console.WriteLine(value);
            System.Diagnostics.Trace.WriteLine(value);

        }

    }

注意:我会覆盖我需要的内容,因此,如果您编写其他类型,则应覆盖更多内容

答案 9 :(得分:0)

是时候检查一下Visual Studio的最新版本了。以前对某些人不起作用的建议最多的解决方案现在可能会起作用。

在Visual Studio 2017(版本15.4.2 及更高版本)中,转到Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Window对我有用。

一些注意事项: 1.要查看立即窗口,请确保您处于调试模式。 2.现在应该可以使用3种其他调试工具,分别是“调用堆栈”,“断点”和“命令窗口”,如下所示:

enter image description here

最良好的祝愿!

答案 10 :(得分:0)

关于System.Diagnostics.Debug在“输出”窗口中产生大量“垃圾”: 您可以通过右键单击输出窗口来关闭它。例如。有一个要禁用的“模块加载消息”项和一个要保留的“程序输出”项。

答案 11 :(得分:0)

您可以通过三种方法来做到这一点,但这并非无关紧要。 所有IDE的主要思想是它们都是子(调试)进程的父级。在这种情况下,可以使用标准输入,输出和错误处理程序进行操作。因此,IDE启动子应用程序,然后重定向到内部输出窗口。我知道还有一种可能性,但将来会出现

  1. 您可以为Visual Studio实现自己的调试引擎。调试引擎控件启动和调试应用程序。您可以在docs.microsoft.com(Visual Studio Debug engine)上找到有关此操作的示例
  2. 对于c ++使用重复的std处理程序重定向表单应用程序,或者对于c#使用Console.SetOut(TextWriter)。 如果需要打印到输出窗口中,则需要使用Visual Studio扩展SDK。 您可以在Github上找到第二个变体的示例。
  3. 启动使用System.Diagnostics.Debug.WriteLine(用于打印到输出)的应用程序,然后它将启动子应用程序。启动孩子时,您需要使用管道将stdout重定向到父级。您可以在MSDN上找到一个示例。但是我认为这不是最好的方法。

答案 12 :(得分:0)

如果您需要从Console.WriteLine输出,并且将所有输出窗口文本重定向到立即窗口不起作用,并且您需要了解Integrated Test Explorer中测试的输出,使用NUnit.Framework ,我们的问题已在VS 2017中得到解决

Jon Skeet摘自C#In Dethth的示例: Example taken from C# In Depth by Jon Skeet 这将在Text Explorer中产生以下输出: Task Explorer

当我们在右侧的“经过的时间”下单击“蓝色输出”时,它会产生以下结果: Standard Output

标准输出 是我们所需的输出,由Console.WriteLine产生。

它在VS 2017上适用于控制台和Windows窗体应用程序,但仅适用于在调试或运行时为Test Explorer生成的输出;无论如何,这是我对Console.WriteLine输出的主要需求。

答案 13 :(得分:-2)

您只需要将项目设置中的输出类型更改为 Windows应用程序。没有其他的。然后它将使用“ 输出”窗口而不是控制台窗口。

答案 14 :(得分:-3)

步骤1:右键单击Solution Explorer中的Project Name,然后将Output type设置为Window Application

第2步:调试 - >选项..-->调试(展开) - >常规 - >将所有输出窗口文本重定向到立即窗口