Наличие вывода консольного приложения в Visual Studio вместо консоли.
-
23-09-2019 - |
Вопрос
При создании консольного приложения на Java с помощью Eclipse я вижу, что выходные данные помещаются в текстовое поле в самой IDE, а не появляется консоль, как в Visual Studio.Это очень удобно, поскольку даже после закрытия программы я все еще могу эффективно использовать написанный в ней текст, поскольку он не стирается, пока я не запущу его снова.Можно ли добиться чего-то подобного с помощью Visual Studio?Я знаю, что вместо того, чтобы делать
System.Console.WriteLine(str);
я могу сделать
System.Diagnostics.Debug.WriteLine(str);
но это не совсем то же самое, поскольку в окне вывода вы получаете много «мусора», как и все загруженные символы и тому подобное.
Более того, можно ли сделать все в самой IDE, когда вы запускаете приложение, вместо запуска консоли?
Решение
В меню «Инструменты» -> «Диалоговое окно параметров Visual Studio» -> «Отладка» -> установите флажок «Перенаправить весь текст окна вывода в непосредственное окно».
Другие советы
в Визуальная Студия Диалоговое окно «Параметры» -> «Отладка» -> установите флажок «Перенаправить весь текст окна вывода в непосредственное окно».Затем перейдите в настройки проекта и измените тип с «Консольное приложение» на «Приложение Windows».В этот момент Visual Studio больше не открывает окно консоли, а выходные данные перенаправляются в окно вывода в Visual Studio.Однако вы не можете делать ничего «творческого», например, запрашивать ввод ключа или текста или очищать консоль — вы получите исключения во время выполнения.
Использовать System.Diagnostics.Trace
В зависимости от того, какие прослушиватели вы подключаете, выходные данные трассировки могут направляться в окно отладки, консоль, файл, базу данных или все сразу.Возможности буквально безграничны, поскольку реализовать собственный TraceListener чрезвычайно просто.
Вы можете создать приложение-оболочку, которое запустите вместо прямого запуска реального приложения.Приложение-оболочка может прослушивать стандартный вывод и перенаправлять все в Trace.Затем измените настройки запуска, чтобы запустить оболочку, и укажите путь к реальному приложению для запуска.
Вы также можете настроить оболочку на автоматическое присоединение отладчика к новому процессу, если отладчик подключен к оболочке.
Я знаю, что это просто еще один ответ, но я решил написать что-нибудь для новых веб-разработчиков, которые могут запутаться в части «Изменение на приложение Windows», потому что я думаю, что по умолчанию это приложение MVC в Visual Studio 2013. по умолчанию используется тип вывода библиотеки классов.
Мое веб -приложение по умолчанию установлено как выходной тип «библиотеки классов». Вам не нужно это менять.Все, что мне нужно было сделать, это следовать рекомендациям: «Инструменты»> «Параметры»> «Отладка»> «Перенаправить весь текст окна вывода в немедленное окно».Затем я использовал System.Diagnostics.Trace
предложение Джоэла Коегоорна выше.
Простое решение, которое работает для меня, для работы с консольными возможностями (ReadKey, String with Format, arg и т. д.), а также для просмотра и сохранения вывода:
Я пишу TextWriter, который пишет в Console
и чтобы Trace
и заменить 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);
}
}
Примечание:Я переопределяю только то, что мне нужно, поэтому, если вы пишете другие типы, вам следует переопределить больше
Вместо этого вы можете собрать выходные данные в виде результата теста.
Вы не можете предоставить входные данные, но можете легко предоставить несколько тестов с разными аргументами командной строки, при этом каждый тест будет собирать выходные данные.
Если ваша цель — отладка, это простой способ предложить повторяемый сценарий отладки.
namespace Commandline.Test
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CommandlineTests
{
[TestMethod]
public void RunNoArguments()
{
Commandline.Program.Main(new string[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 инструмента отладки, а именно: стек вызовов, точки останова и окно команд, как показано ниже:
С наилучшими пожеланиями!
Шаг 1:Щелкните правой кнопкой мыши имя проекта в обозревателе решений, затем выберите тип вывода как оконное приложение.
Шаг 2:Отладка -> Параметры.. -> Отладка (развернуть) -> Общие -> Перенаправить весь текст окна вывода в непосредственное окно