Сбой чтения ввода из консольного приложения.net-core в vscode
Я пытался заставить dotnet новый пример проекта консоли (для vscode) работать в Ubuntu 17.10.
Я могу получить программу по умолчанию для запуска:
using System;
namespace dotnet_console
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello world!");
}
}
}
Но когда я изменяю его на чтение входных данных, это становится действительно шатким...
using System;
namespace dotnet_console
{
class Program
{
static void Main(string[] args)
{
Console.Write("Name: "); // 1
var name = Console.ReadLine(); // 2
Console.WriteLine("Hello {0}!", name); // 3
}
}
}
Программа строит, но не будет печатать Name:
, Однако, если я поставлю точки останова на строки 1, 2 и 3, я могу видеть, что программа проходит через ВСЕ из них, но ничего не печатает. Пока я не остановлю отладку. Тогда это печатает
Название:
Программа '[16322] dotnet-console.dll' вышла с кодом 0 (0x0).
Что здесь происходит? Я предполагаю, что это вещь vscode, потому что она работает, как ожидалось, когда запускается из терминала, используя dotnet run
,
2 ответа
Документация гласит следующее:
По умолчанию процессы запускаются с выводом их консоли (stdout/stderr) на консоль VS Code Debugger. Это полезно для исполняемых файлов, которые получают данные из сети, файлов и т. Д. Но это НЕ работает для приложений, которые хотят читать с консоли (например, Console.ReadLine). Для этих приложений используйте настройку, такую как
Я нашел решение проблемы здесь.
И следующая цитата из связанной Документации также гласит, что изменение свойства консоли с launch.json на " externalTerminal " или " integratedTerminal " поможет.
Если для этого параметра установлено значение externalTerminal, целевой процесс будет выполняться в отдельном терминале.
Если для этого параметра установлено значение встроенного терминала, целевой процесс будет выполняться внутри встроенного терминала VS Code. Нажмите вкладку "Терминал" в группе вкладок под редактором, чтобы взаимодействовать с вашим приложением.
Правильно - "internalConsole" не предназначен для программ, которые хотят получить консольный ввод. Вот официальная документация: https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window