当我开发一个C#控制台应用程序(将在服务器上运行)并使用Visual Studio运行它时,我会在程序终止之前收到“按任意键继续”消息。
但是,当我使用CSC手动编译完全相同的C#代码文件时,我的程序没有显示该消息,并在完成其逻辑后立即终止。
有没有人知道如何在不使用VS编译代码的情况下制作相同的功能,并且无需更改C#代码就可以添加ReadLine()?
更新:我学习C#时出现的相同消息,我曾经使用带有CSC的TextPad,并且该消息过去没有添加任何Write(Line)/ Read(Line)调用
答案 0 :(得分:22)
这与编译器无关 - 如果按 F5 调试它而不是 Ctrl-F5 运行而不调试,则VS不会显示提示。这可能是因为你不会错过它产生的任何输出。
为此,Visual Studio运行cmd.exe,告诉它运行可执行文件,然后暂停:
"C:\WINDOWS\system32\cmd.exe" /c ""...\ConsoleApplication1.exe" & pause"
调试时可能不会这样做,因为获取子进程的子进程ID有点困难。
要为程序添加类似选项,请使用命令行开关告诉应用程序本身暂停,或使用批处理文件运行它然后暂停,或使用快捷方式cmd.exe /c
。< / p>
答案 1 :(得分:14)
那是不可能的。运行控制台应用程序时,Visual Studio会生成按任意键的提示。这不是你的计划的一部分。
唯一的方法是在代码中使用Console.Read()
更新:关于你使用TextPad的评论:我对TextPad并不熟悉,但是如果TextPad在运行控制台应用程序时与Visual Studio做同样的事情,我也不会感到惊讶。 / p>
答案 2 :(得分:8)
你可以这样做......
static void Main(string[] args)
{
#if DEBUG
Console.Read();
#endif
}
这样,当您将应用程序构建为“发布”时,程序将不会等待控制台输入。
答案 3 :(得分:7)
您可以编写一个为您运行exe的批处理脚本,并提示用户按一个键。
批处理脚本看起来像这样:
echo off
YourApp.exe
pause
答案 4 :(得分:3)
如果您在调试时需要相同的功能,则可以执行此操作。
if (Debugger.IsAttached)
{
Console.WriteLine("Press any key to continue . . . ");
Console.ReadKey(true);
}
答案 5 :(得分:2)
此行为与您使用的编译器无关。使用Visual Studio进行编译时,在Visual Studio外部运行可执行文件实际上将与在命令行上使用CSC编译时执行的操作完全相同。 Visual Studio(和TextPad)正在添加逻辑以在控制台上添加“按任意键以继续”消息。
如果您希望应用程序保持打开状态,则需要执行类似Console.ReadLine()的操作来阻止执行,以便应用程序无法完成其执行。
答案 6 :(得分:1)
问题是为什么你想要这种行为?按任意键继续功能,以便您可以看到应用程序的输出。另一方面,如果您构建代码并从命令提示符(控制台)运行它,则在应用程序完成时不会关闭,因此您可以看到输出。
如上所述,按任意键继续是IDE的一项功能,与您正在编写的代码无关。该功能的目的是允许您查看控制台应用程序的输出。