Как VS компилирует консольные приложения, чтобы показать "нажмите любую клавишу, чтобы продолжить"?

когда я разрабатываю консольное приложение C# (которое будет работать на сервере), и я запускаю его с помощью Visual Studio, я получаю сообщение "Нажмите любую клавишу, чтобы продолжить", прежде чем программа завершится.

однако, когда я компилирую тот же самый файл кода C# вручную с помощью CSC, моя программа не показывает это сообщение, и оно завершается сразу после завершения его логики.

кто-нибудь знает, как я могу сделать ту же функцию при компиляции кода без использования VS и без изменение кода C# любое добавление ReadLine ()?

UPDATE: то же самое сообщение, которое появлялось, когда я изучал C#, я использовал TextPad с CSC, и это сообщение появлялось без добавления каких-либо вызовов Write(Line)/Read(Line)

7 ответов


вы могли бы написать пакетный скрипт, который запускает exe для вас и предлагает пользователю нажать клавишу.

пакетный скрипт будет выглядеть примерно так:

echo off
YourApp.exe
pause

это не имеет никакого отношения к компилятору - если вы нажмете Ф5 для отладки, а не Сочетания Клавиш Ctrl-Клавишу F5 для запуска без отладки, затем VS не показывает приглашение. Это, по-видимому, так, что вы не пропустите какой-либо результат, который он производит.

для этого Visual Studio запускает cmd.exe говорит ему запустить исполняемый файл, а затем приостановить:

"C:\WINDOWS\system32\cmd.exe" /c ""...\ConsoleApplication1.exe"  & pause"

это, вероятно, не делает этого при отладке, так как немного сложнее получить идентификатор процесса ребенка о детском процессе.

чтобы добавить аналогичную опцию в вашу программу, либо используйте переключатель командной строки, чтобы сказать самому приложению приостановить, либо используйте пакетный файл для его запуска, а затем приостановить, или используйте ярлык с ними cmd.exe /c.


Это невозможно. Приглашение нажать любую клавишу создается Visual Studio при запуске консольного приложения. Это не входит в вашу программу.

единственный способ - использовать консоль.Прочитайте () в своем коде

обновление: что касается вашего замечания об использовании TextPad: я не знаком с TextPad, но я не удивлюсь, если TextPad сделал то же самое, что Visual Studio при запуске консольного приложения.


вы могли бы сделать это...

static void Main(string[] args)
{
#if DEBUG
    Console.Read();
#endif
}

таким образом, программа не будет ждать ввода консоли при создании приложения в качестве "выпуска".


такое поведение не имеет ничего общего с компилятором, который вы используете. При компиляции с Visual Studio запуск исполняемого файла за пределами Visual Studio фактически будет выполняться точно так же, как при компиляции с CSC в командной строке. Visual Studio (и TextPad) добавляет логику для добавления сообщения "нажмите любую клавишу, чтобы продолжить" на консоли.

Если вы хотите, чтобы ваше приложение оставалось открытым, вам нужно будет сделать что-то вроде консоли.ReadLine() для блокировки выполнения чтобы ваше приложение не завершило выполнение.


вы можете сделать это, если хотите такую же функциональность при отладке.

if (Debugger.IsAttached)
{
    Console.WriteLine("Press any key to continue . . .");
    Console.ReadKey(true);
}

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

Как отмечалось выше, нажатие любой клавиши для продолжения является функцией IDE и не связано с кодом, который вы пишете. Целью этой функции является позволяет просматривать выходные данные консольного приложения.