Visual studio 避免";按任意键继续“;从Visual Studio运行控制台应用程序时

Visual studio 避免";按任意键继续“;从Visual Studio运行控制台应用程序时,visual-studio,console-application,Visual Studio,Console Application,在Visual Studio中通过“启动而不调试”(Ctrl+F5)运行控制台应用程序时,控制台在运行结束时保持打开状态,要求 按任意键继续 因此需要激活窗口并按一个键。有时这是不合适的 为什么这很重要: 就在我编写json序列化代码的那一刻,我的工作流程如下: 调整c#代码 运行写入文件out.json的控制台应用程序 使用json查看器在浏览器中查看out.json 反复这样做,不需要调试任何东西,只需修剪序列化并检查输出是否良好 正是这样的工作流,“按任意…”行为会阻碍,因为它需要步骤

在Visual Studio中通过“启动而不调试”(Ctrl+F5)运行控制台应用程序时,控制台在运行结束时保持打开状态,要求

按任意键继续

因此需要激活窗口并按一个键。有时这是不合适的

为什么这很重要: 就在我编写json序列化代码的那一刻,我的工作流程如下:

  • 调整c#代码
  • 运行写入文件out.json的控制台应用程序
  • 使用json查看器在浏览器中查看out.json
反复这样做,不需要调试任何东西,只需修剪序列化并检查输出是否良好

正是这样的工作流,“按任意…”行为会阻碍,因为它需要步骤

  • 激活控制台窗口
  • 按键
没有答案:

  • 在VS之外的单独控制台中启动应用程序不是一个答案
  • 说,你不需要这个

我很确定你不能影响或改变这种行为

正如您提到的,它与您的应用程序本身无关,因为当您双击EXE时,它不会这样做。只有在未连接调试器的情况下从Visual Studio中运行应用程序时,才能看到此效果

想必,当您调用Ctrl+F5时,VisualStudio正在以特定的方式运行您的应用程序,从而使控制台窗口保持打开状态。我可以想出两种方法:

%COMSPEC% /k "C:\Path\To\YourApplication.exe"

使用这两种方法中的任何一种,您看到的暂停行为都会被直接烘焙到用于启动应用程序的命令中,因此是应用程序的外部行为。因此,除非您有权访问VisualStudio源代码,否则您不会更改它。从应用程序中调用
退出
功能不会产生任何效果,因为在消息出现时,应用程序已退出

当然,除了好奇之外,我不明白为什么这真的很重要。当您在启动应用程序时附加了调试器时,不会发生这种情况,当您从IDE启动应用程序时,99%的时间都是这样做的。由于你的应用程序没有附带Visual Studio,你的用户将在VS之外启动应用程序


对于您的问题所做的更新,最好的解决方案是更改您的应用程序,使其不是控制台应用程序。此行为不影响标准Windows应用程序;当它们关闭时,它们就永远关闭了

如果您不需要控制台窗口上的任何输出,那么这是非常简单的:只是。Windows窗体应用程序可以正常工作。如果不显示窗口(也称为窗体),则不会自动创建窗口。这就是普通Windows应用程序和控制台应用程序之间的区别,无论您是否需要控制台窗口,控制台应用程序总是创建控制台窗口

如果确实需要在console窗口上显示输出,则有两个选项:

  • 创建并使用带有ListBox或ListView控件的简单表单。通常输出到控制台的每一行,都作为一个新项添加到列表控件中。如果您不使用控制台的任何“高级”功能,那么这项功能将非常有效
  • P/Invoke并调用函数以创建Windows应用程序可以使用的控制台。您不需要填写此表单

  • 我找到了一个在使用python时可以使用的解决方案(我无法测试其他任何东西)。 你需要去

    工具->选项->Python工具->调试

    当进程正常退出时,取消选中“等待输入”


    我希望您能以某种方式将此应用于您的问题。

    至少在Visual Studio 2010中,键入

     Console.ReadKey(true);
    

    删除vs2017中的“按任意键继续…”

    您必须取消选中vs选项下的python环境设置:


    德语:Auf Eingabe warten,wenn der Prozess normal beendet wird2020年更新:微软已经听过了

    它还以“启动而不调试”模式关闭控制台;)

    设置有点隐蔽,但可以工作:


    根据VS2019文件:

    调试停止时自动关闭控制台:告诉Visual Studio在调试会话结束时关闭控制台


    它可以工作,但前提是您必须确保项目启动时调试器处于打开状态。这听起来很简单,但我一开始尝试了一个解决方案,它有两个项目,一个是控制台,一个是复制文件以在我的应用程序中使用,另一个是运行实际的应用程序。我将Console one设置为启动而不进行调试,因为我不需要对它进行调试,但在它运行后,这并没有关闭它。只有在将其设置为“启动”(带调试)时,此选项才起作用。

    首先必须启动VS这样的大型程序,而只是启动您的控制台应用程序,没有什么好处。通过在桌面上创建程序的快捷方式来避免此消息。是否可以在每次生成后自动运行应用程序?也就是说,将“$(TargetPath)$”设置为编译后命令行。thx reima,“$(TargetPath)”实际上是一个很酷的想法;-)我已经有一段时间没有编写控制台应用程序了,但将其更改为发布模式会有任何影响吗?@brad:将输出类型更改为“Windows应用程序”不会导致我所寻找的行为,很酷,谢谢。@CodyGray“我不明白为什么它真的很重要”因为有时您需要一个快速的编译/执行周期,而无需附加调试器(这会减慢应用程序的启动)。例如,我正在测试一个输出文档文件的应用程序。文档内容在外部应用程序中实时反映。我正在通过代码进行视觉调整,我真的只想调整,调整,运行,调整,运行。我不想启动调试器,也不想取消调试器
     Console.ReadKey(true);