Наличие вывода консольного приложения в Visual Studio вместо консоли

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

System.Console.WriteLine(str);

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

System.Diagnostics.Debug.WriteLine(str);

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

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

Ответ 1

В меню "Инструменты" → "Параметры Visual Studio" → "Отладка" → установите флажок "Перенаправить текст всего окна вывода в окно немедленного действия".

Ответ 2

В диалоговом окне "Параметры Visual Studio" → "Отладка" → "Перенести все окна окна вывода" в окно "Немедленное окно". Затем перейдите к настройкам вашего проекта и измените тип "Консольное приложение" на "Приложение Windows". В этот момент Visual Studio больше не открывает консольное окно, а выход перенаправляется в окно вывода в Visual Studio. Однако вы не можете сделать ничего "творческого", например, запросить ввод ключа или текста или очистить консоль - вы получите исключения во время выполнения.

Ответ 3

Используйте System.Diagnostics.Trace

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

Ответ 5

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

Убедитесь, что вы проверяете

Ответ 6

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

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

Ответ 7

Я знаю, что это всего лишь еще один ответ, но я думал, что напишу что-нибудь для новых веб-разработчиков, которые могут запутаться в части "Переход на приложение Windows", потому что по умолчанию я полагаю приложение MVC в Visual Studio 2013 по умолчанию имеет тип вывода библиотеки классов.

Мой веб-приложение по умолчанию устанавливается как тип вывода "Библиотека классов". Вам не нужно это менять. Все, что мне нужно было сделать, это следовать рекомендациям "Инструменты" > "Параметры" > "Отладка" > "Перенаправить все текст окна вывода" в окно "Немедленное". Затем я использовал предложение System.Diagnostics.Trace Джоэля Коэхорна выше.

Ответ 8

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

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

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

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

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

Ответ 9

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

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

если вы используете Dialog → Debugging → отметьте "Перенаправить весь текст выходного окна в немедленное окно", вы получите его в немедленном и довольно чистом.

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

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

        }

    }

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

Ответ 10

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

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

Ответ 11

Вам нужно только изменить тип вывода в настройках проекта на приложение Windows. Ничего больше. Тогда он будет использовать окно " Вывод " вместо окна консоли.