Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;按任意键继续……”;“中显示的消息”;“不调试启动”;模式_C#_Visual Studio_Visual Studio 2017_Console Application - Fatal编程技术网

C# &引用;按任意键继续……”;“中显示的消息”;“不调试启动”;模式

C# &引用;按任意键继续……”;“中显示的消息”;“不调试启动”;模式,c#,visual-studio,visual-studio-2017,console-application,C#,Visual Studio,Visual Studio 2017,Console Application,我在Visual Studio中创建了一个空白的C#控制台应用程序,如下所示: using System; namespace ConsoleApplication1 { class Solution { static void Main(string[] args) { Console.ReadLine(); } } } 当我按F5使用默认的开始调试选项时,程序会按预期正常运行。我按下回车键,程

我在Visual Studio中创建了一个空白的C#控制台应用程序,如下所示:

using System;

namespace ConsoleApplication1
{
    class Solution
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
        }
    }
}
当我按F5使用默认的
开始调试
选项时,程序会按预期正常运行。我按下回车键,程序结束

但当我按Ctrl+F5使用
Start Without debug
选项时,按下Enter键后,控制台上会显示一条额外消息:

按任意键继续

然后我必须按键盘上的另一个键来终止程序。这条神奇的消息来自哪里?为什么它只显示在
Start而不调试
选项中


注意:项目的生成后事件命令行完全为空。

这就是visual studio不在调试模式下运行控制台程序的方式。据我所知,这是无法控制的。因为它显示它实际上是一个cmd.exe实例,而不仅仅是一个控制台窗口,所以我假设VS在命令行上使用了/K标志(我原以为它使用的是批处理文件,但现在看来没有必要这样做)


这是针对控制台程序运行并简单退出的典型情况而做的,如果没有该消息,这样的程序将不会有机会看到输出。

我能够验证@SoronelHaetir在回答中共享的信息。我在这里通过一些屏幕截图详细说明了这一点,这些截图将补充他的文章中的信息,并帮助您更好地理解这一点:

  • 当我通过按F5使用默认的
    开始调试
    选项运行应用程序时,我们可以在任务管理器中看到启动应用程序的可执行文件:
  • 当我右键单击任务并从关联菜单中选择“转到进程”
    选项时,我将进入进程选项卡上的一个进程,该进程具有图像名称
    ConsoleApp1.exe*32
    ,如下所示。这很有道理

  • 现在,当我通过按Ctrl+F5使用
    启动而不调试
    选项运行应用程序时,看不到任务管理器中启动的应用程序的可执行文件。事实上,我们看到正在启动
    cmd.exe
    ,如下所示:
  • 现在,当我右键单击
    cmd.exe
    任务并从上下文菜单中选择
    转到进程
    选项时,我被带到进程选项卡上的一个进程,该进程的图像名为
    cmd.exe*32
    ,如下所示。但还有更多。您还可以看到进程选项卡中运行的
    ConsoleApp1.exe*32
    ,该选项卡在
    应用程序
    选项卡中不可见

    这就是所有点连接的方式,在
    启动而不调试
    模式下,Visual Studio实际上启动了一个
    cmd.exe
    实例,该实例反过来启动我们的应用程序
    ConsoleApp1.exe

    当我按enter键时,
    ConsoleApp1.exe
    进程终止,但
    cmd.exe
    进程继续运行,直到我按另一个键,如下所示:

    using System;
    
    namespace ConsoleApplication1
    {
        class Solution
        {
            static void Main(string[] args)
            {
                Console.ReadLine();
            }
        }
    }
    

    是的,启动“包装”可执行文件的
    cmd.exe
    如下所示:
    C:\Windows\system32\cmd.exe“/C”“[your.exe]”和pause“
    ,您可以使用Process Explorer之类的工具自行验证,该工具可以显示启动程序时使用的命令行。在cmd中,一个符号和无条件地将两个命令链接在一个命令行上。在调试模式下也会发生这种情况。