Сбой чтения ввода из консольного приложения.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. Нажмите вкладку "Терминал" в группе вкладок под редактором, чтобы взаимодействовать с вашим приложением.

Местоположение launch.json

Правильно - "internalConsole" не предназначен для программ, которые хотят получить консольный ввод. Вот официальная документация: https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window

Другие вопросы по тегам