Ответ 1
Вы можете написать пакет script, который запускает exe для вас, и предложит пользователю нажать клавишу.
Пакет script будет выглядеть примерно так:
echo off
YourApp.exe
pause
Когда я разрабатываю консольное приложение С# (которое будет запускаться на сервере), и я запускаю его с помощью Visual Studio, я получаю сообщение "Нажмите любую клавишу для продолжения" до того, как программа завершится.
Однако, когда я скомпилирую тот же самый файл кода С# вручную, используя CSC, моя программа не показывает это сообщение, и оно завершается сразу же после завершения его логики.
Кто-нибудь знает, как я могу сделать одну и ту же функцию при компиляции кода без использования VS и без изменения кода С# при добавлении ReadLine()?
ОБНОВЛЕНИЕ: то же сообщение, которое появилось, когда я узнал С#, я использовал TextPad с CSC, и это сообщение, которое отображалось без добавления вызовов Write (Line)/Read (Line)
Вы можете написать пакет script, который запускает exe для вас, и предложит пользователю нажать клавишу.
Пакет script будет выглядеть примерно так:
echo off
YourApp.exe
pause
Это не связано с компилятором - если вы нажмете F5, чтобы отлаживать его, а не Ctrl-F5 для запуска без отладки, то VS не отображает приглашение. Это, по-видимому, так, что вы не пропустите какой-либо вывод, который он производит.
Для этого Visual Studio запускает cmd.exe, говоря ей, чтобы запустить исполняемый файл, а затем приостановить:
"C:\WINDOWS\system32\cmd.exe" /c ""...\ConsoleApplication1.exe" & pause"
Вероятно, это не так, когда вы отлаживаете, поскольку немного сложнее получить идентификатор процесса дочернего процесса дочернего процесса.
Чтобы добавить подобный вариант в свою программу, используйте либо переключатель командной строки, чтобы сообщить самому приложению приложения приостановить, либо использовать пакетный файл для его запуска, затем приостановить или использовать ярлык с ними cmd.exe /c
.
Это невозможно. Запрос на нажатие любой клавиши генерируется Visual Studio при запуске консольного приложения. Это не часть вашей программы.
Единственный способ - использовать Console.Read() в вашем коде
UPDATE: относительно вашего замечания об использовании TextPad: я не знаком с TextPad, но я не удивлюсь, если TextPad выполнил то же, что и Visual Studio при запуске консольного приложения.
Вы можете сделать это...
static void Main(string[] args)
{
#if DEBUG
Console.Read();
#endif
}
Таким образом, программа не будет ждать ввода в консоль, когда вы создадите приложение как "Release".
Это поведение не имеет ничего общего с используемым компилятором. Когда вы компилируете с помощью Visual Studio, запуск исполняемого файла вне Visual Studio фактически будет выполнять точно так же, как при компиляции с CSC в командной строке. Visual Studio (и TextPad) добавляет логику, чтобы добавить сообщение "Нажмите любую клавишу для продолжения" на консоли.
Если вы хотите, чтобы ваше приложение оставалось открытым, вам нужно сделать что-то вроде Console.ReadLine(), чтобы заблокировать выполнение, чтобы ваше приложение не завершило его выполнение.
Это можно сделать, если вы хотите иметь такую же функциональность при отладке.
if (Debugger.IsAttached)
{
Console.WriteLine("Press any key to continue . . .");
Console.ReadKey(true);
}
Вопрос в том, почему вы хотите иметь такое поведение? Нажмите любую клавишу, чтобы продолжить функцию, чтобы вы могли видеть результаты своего приложения. Если, с другой стороны, вы создаете свой код и запускаете его из командной строки (консоли), это не будет закрываться, когда приложение закончит работу, поэтому вы можете увидеть результат.
Как отмечалось выше, нажмите любую клавишу для продолжения - это функция IDE и не связана с кодом, который вы пишете. Цель этой функции - позволить вам видеть вывод вашего консольного приложения.