29

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

按任意键继续 。. .

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

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

  • 适配c#代码
  • 运行写入文件 out.json 的控制台应用程序
  • 使用 json 查看器在浏览器中查看 out.json

一次又一次地这样做,不需要调试任何东西,只需修剪序列化并检查输出就可以了。

像这样的工作流程,“按任何...”行为阻碍了它,因为它需要步骤

  • 激活控制台窗口
  • 按 键。

没有答案:

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

6 回答 6

16

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

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

据推测,当您调用Ctrl+时F5,Visual Studio 正在以特定方式运行您的应用程序,从而导致控制台窗口保持打开状态。我可以想到两种可能的方式:

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

或者

%COMSPEC% /c ""C:\Path\To\YourApplication.exe" & pause"

使用其中任何一种,您看到的暂停行为都会直接融入用于启动您的应用程序的命令中,因此在您的应用程序之外。因此,除非您有权访问 Visual Studio 源代码,否则您不会更改它。从您的应用调用exit函数不会有任何效果,因为在该消息出现时您的应用已经退出。

当然,除了好奇之外,我看不出它为什么真的很重要。当您启动带有调试器的应用程序时不会发生这种情况,这是您从 IDE 启动应用程序时 99% 的时间所做的事情。而且由于您不随应用一起发布 Visual Studio,因此您的用户在 VS 之外启动应用。


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

如果您不需要控制台窗口上的任何输出,那么这很简单:只需更改项目属性中的“应用程序类型”即可。Windows 窗体应用程序可以正常工作。如果您不显示窗口(也称为表单),则不会自动创建一个窗口。这是常规 Windows 应用程序和控制台应用程序之间的区别,无论您是否需要,它们总是创建一个控制台窗口。

如果您确实需要在控制台窗口上显示输出,您有几个选择:

  1. 创建并使用带有 ListBox 或 ListView 控件的简单表单。通常输出到控制台的每一行,都作为新项目添加到列表控件中。如果您不使用控制台的任何“高级”功能,这将很有效。
  2. P/Invoke 并调用该AllocConsole函数以创建您的 Windows 应用程序可以使用的控制台。您不需要为此填写表格。
于 2013-07-27T12:54:11.380 回答
10

如果您使用 python,我找到了一个可行的解决方案(我无法测试其他任何东西)。你需要去

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

取消选中Wait for input when process exits normally

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

于 2014-05-27T15:35:47.200 回答
3

2020 年更新:微软已经听取了意见。

在此处输入图像描述

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

设置有点埋没,但有效:

在此处输入图像描述

于 2020-09-16T07:56:13.253 回答
1

好吧,至少在 Visual Studio 2010 中,键入

 Console.ReadKey(true);

删除“按任意键继续......”

于 2016-03-25T13:56:06.123 回答
0

根据 VS2019 文档:

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

它有效,但前提是您确保您的项目从调试器开始。这听起来微不足道,但我一开始尝试使用包含两个项目的解决方案,一个用于复制文件以在我的应用程序中使用的控制台,另一个用于运行实际的应用程序。我将控制台一设置为无需调试即可启动,因为我不需要对其进行调试,但是在它运行后并没有关闭它。仅当将其设置为启动(带调试)时,此选项才有效。

于 2020-11-12T04:44:16.737 回答
-1

在 vs2017 中,您必须取消选中 vs-options 下的 python 环境设置:

德语:Auf Eingabe warten, wenn der Prozess normal bedet wird

于 2020-09-05T14:59:10.003 回答