Стандартная ошибка ввода, если при отладке в VS2017 присутствуют аргументы командной строки - PullRequest
0 голосов
/ 21 ноября 2018

У меня странная проблема, когда стандартный ввод ведет себя неожиданно при отладке в Visual Studio 2017, но только при наличии аргументов командной строки.Проблема не возникает в VS2010.

В качестве примера рассмотрим Приложение Windows для .Net 3.5 с этим простым кодом:

static class Program
{
    static void Main()
    {
        if (Console.In == null)
        {
            Console.WriteLine("Console.In: null");
        }
        else if (Console.In == StreamReader.Null)
        {
            Console.WriteLine("Console.In: " + Console.In.GetType().FullName);
        }
        else
        {
            Console.WriteLine("Console.In: " + Console.In.GetType().FullName);

            string cmd;
            while ((cmd = Console.In.ReadLine()) != null )
            {
                Thread.Sleep(1000);
            }
        }
    }
}

При отладке этого вVS2010, выходные данные отладки будут "Console.In: System.IO.StreamReader + NullStreamReader" независимо от того, указаны ли (фиктивные) аргументы командной строки в опциях запуска для проекта.

При точной отладкетот же код в VS2017, если не заданы аргументы командной строки, тогда стандартным вводом будет нулевой поток.Однако, если заданы аргументы командной строки, вместо этого будет выведено «Console.In: System.IO.TextReader + SyncTextReader», а затем произойдет сбой в ReadLine (), поскольку он фактически не способен читать из этого потока:

Возникло исключение: «System.IO.IOException» в mscorlib.dll Произошло необработанное исключение типа «System.IO.IOException» в mscorlib.dll Недостаточно памяти для обработки этой команды.

Почему VS2017 во время отладки с присутствующими аргументами командной строки генерирует это неожиданное стандартное средство чтения ввода?Можно ли от него избавиться?

В качестве альтернативы, что может быть лучше для этого?(То, что я пытаюсь сделать, это проверить, есть ли полезный стандартный ввод, потому что, если есть реальная программа, может прочитать некоторые команды из нее. Если нет стандартного ввода, это должно быть просто проигнорировано, а остальная часть программы продолжаетсяв пути кода по умолчанию.)

Среда: Windows 7 64bit, VS2017 15.9.2.Я проверил это под .Net 3.5 и 4.0 с одинаковыми результатами.(.Net 4.7.2 установлен на машине).

Обновление 2018-11-22

Проблема возникает на моей машине, а также для коллеги, обав Windows 7 64-bit.

Два других коллеги работают под управлением Windows 10 и для них проблема не возникает.Если в Windows 10 Console.In, как и ожидалось, будет NullStreamReader, даже если при отладке присутствуют аргументы командной строки.

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