首页 文章

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

提问于
浏览
101

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

System.Console.WriteLine(str);

我可以

System.Diagnostics.Debug.WriteLine(str);

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

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

12 回答

  • 1

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

  • 38

    在Visual Studio选项对话框 - >调试 - >检查"Redirect All Output Window Text to the Immediate Window" . 然后转到项目设置并将类型从"Console Application"更改为"Windows Application" . 此时,Visual Studio不再打开控制台窗口,输出将重定向到Visual Studio中的“输出”窗口 . 但是,您无法执行任何操作"creative",如请求键或文本输入,或清除控制台 - 您将获得运行时异常 .

  • 3

    使用System.Diagnostics.Trace

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

  • 5
  • 3

    确保在调试设置窗口中选中“ Redirect All Output... ”复选框:

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

  • 0

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

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

  • -3

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

    默认情况下,我的Web应用程序设置为"Class Library."的输出类型 . 您不必更改它 . 我所要做的就是按照转到工具>选项>调试>将所有输出窗口文本重定向到立即窗口的建议 . 然后我使用了上面Joel Coehoorn提出的建议 .

  • 39

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

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

    如果您的目标是调试,那么这是一种提供可重复调试方案的低成本方法 .

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

    一个简单的解决方案,适用于我,使用控制台能力(ReadKey,String with Format和arg等)并查看和保存输出:

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

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

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

    Console.SetOut(new TextHelper());
    

    和 class :

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

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

  • 0

    人们应该检查Visual Studio的最新版本 . 以前对你们中的某些人不起作用的建议最多的解决方案现在可能有效 .

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

    几个注意事项:1 . 要查看立即窗口,请确保您处于 Debugging 模式 . 2.现在应该有3种其他可用的调试工具,即调用堆栈,断点和命令窗口,如下所示:

    enter image description here

    最好的祝愿!

  • 0

    您只需要将 Project settings 中的 Output type 更改为 Windows Application . 没有其他的 . 然后它将使用“ Output ”窗口而不是控制台窗口 .

  • -2

    步骤1:在解决方案资源管理器中右键单击项目名称然后将输出类型设置为窗口应用程序

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

相关问题