VS编译控制台应用程序如何显示“按任意键继续”?

时间:2009-07-09 12:00:48

标签: c# .net visual-studio console

当我开发一个C#控制台应用程序(将在服务器上运行)并使用Visual Studio运行它时,我会在程序终止之前收到“按任意键继续”消息。

但是,当我使用CSC手动编译完全相同的C#代码文件时,我的程序没有显示该消息,并在完成其逻辑后立即终止。

有没有人知道如何在不使用VS编译代码的情况下制作相同的功能,并且无需更改C#代码就可以添加ReadLine()?

更新:我学习C#时出现的相同消息,我曾经使用带有CSC的TextPad,并且该消息过去没有添加任何Write(Line)/ Read(Line)调用

7 个答案:

答案 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的一项功能,与您正在编写的代码无关。该功能的目的是允许您查看控制台应用程序的输出。