У меня странная проблема, когда стандартный ввод ведет себя неожиданно при отладке в 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, даже если при отладке присутствуют аргументы командной строки.