Наличие вывода консольного приложения в Visual Studio вместо консоли - PullRequest
106 голосов
/ 30 марта 2010

Когда я выполняю консольное приложение на Java с Eclipse, я вижу вывод в текстовое поле в самой IDE вместо того, чтобы консоль выскочила, как в Visual Studio. Это очень удобно, так как даже после выхода из программы я все еще могу эффективно использовать текст, который был в ней написан, так как он не стирается, пока я не запущу его снова. Можно ли достичь чего-либо подобного с помощью Visual Studio? Я знаю, что вместо того, чтобы делать

System.Console.WriteLine(str);

Я могу сделать

System.Diagnostics.Debug.WriteLine(str);

но это не совсем то же самое, так как вы получаете много "мусора" в окне вывода, как и все загруженные символы и тому подобное.

Еще лучше, возможно ли, чтобы все выполнялось в самой IDE при запуске приложения вместо запуска консоли?

Ответы [ 11 ]

42 голосов
/ 31 марта 2010

В Инструменты -> Диалоговое окно Параметры Visual Studio -> Отладка -> Установите флажок «Перенаправить весь текст окна вывода в окно немедленного действия».

38 голосов
/ 08 марта 2012

В Visual Studio Диалог параметров -> Отладка -> Установите флажок «Перенаправить весь текст окна вывода в окно немедленного действия». Затем перейдите в настройки проекта и измените тип с «Консольное приложение» на «Приложение Windows». В этот момент Visual Studio больше не открывает консольное окно, и вывод перенаправляется в окно вывода в Visual Studio. Тем не менее, вы не можете сделать что-нибудь «креативное», например, запросить ввод ключа или текста или очистить консоль - вы получите исключения во время выполнения.

6 голосов
/ 30 марта 2010

Использование System.Diagnostics.Trace

В зависимости от того, какие прослушиватели вы подключаете, вывод трассировки может идти в окно отладки, консоль, файл, базу данных или все сразу. Возможности буквально безграничны, так как реализация собственного TraceListener чрезвычайно проста.

3 голосов
/ 30 марта 2010
2 голосов
/ 29 марта 2017

Убедитесь, что флажок « Перенаправить весь вывод ... » в окнах настроек отладки:

Make sure the check the

1 голос
/ 30 марта 2010

Вы можете создать приложение-оболочку, которое вы запускаете вместо непосредственного запуска вашего реального приложения. Приложение-оболочка может прослушивать stdout и перенаправлять все в Trace. Затем измените настройки запуска, чтобы запустить оболочку и передать путь к реальному приложению для запуска.

Вы также можете иметь оболочку, автоматически присоединяющую отладчик к новому процессу, если к оболочке присоединен отладчик.

0 голосов
/ 03 января 2019

Пришло время проверить последние выпуски для 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

С наилучшими пожеланиями!

0 голосов
/ 13 декабря 2018

Простое решение, которое работает для меня, для работы с консольной способностью (ReadKey, String with Format и arg и т. Д.), А также для просмотра и сохранения вывода:

Я пишу TextWriter, который пишет в Console и Trace и заменяю Console.Out на него.

если вы используете Dialog -> Debugging -> отметьте «Перенаправить весь текст выходного окна в немедленное окно», вы получите его в Immediate Window и довольно чисто.

мой код: в начале моего кода:

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

        }

    }

Примечание: я переопределяю только то, что мне было нужно, поэтому, если вы пишете другие типы, вы должны переопределить больше

0 голосов
/ 15 марта 2018

Шаг 1: Щелкните правой кнопкой мыши на имени проекта в обозревателе решений, затем выберите тип вывода в качестве оконного приложения

Шаг 2: Отладка -> Параметры ..--> Отладка (развернуть) -> Общие -> Перенаправить текст всего окна вывода в окно немедленного действия

0 голосов
/ 17 января 2017

Вместо этого вы можете собрать выходные данные в результате теста.

Вы не можете предоставить ввод, но вы можете легко предоставить несколько тестов с разными аргументами командной строки, каждый из которых собирает выходные данные.

Если ваша цель - отладка, это простой способ предложить повторяемый сценарий отладки.

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

    [TestClass]
    public class CommandlineTests
    {
        [TestMethod]
        public void RunNoArguments()
        {
            Commandline.Program.Main(new string[0]);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...