Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
.net 设置Console.WriteLine&;Debug.WriteLine_.net_Visual Studio_Clr - Fatal编程技术网

.net 设置Console.WriteLine&;Debug.WriteLine

.net 设置Console.WriteLine&;Debug.WriteLine,.net,visual-studio,clr,.net,Visual Studio,Clr,当我在Visual Studio中创建控制台应用程序时,会自动提供一个cmd窗口,在该窗口上可以写入和读取文本。这种行为是在哪里形成的?VS是这样做的还是仅仅是编译的.Net程序的结果 另一方面,VS如何钩住System.Diagnostics.Debug.WriteLine(“这是魔术”)直到输出窗口?编译控制台应用程序时,它会创建一个.exe文件,该文件是控制台应用程序。如果您启动该exe,例如从windows资源管理器启动,则会调用cmd窗口。如果您在没有调试器的情况下运行该应用程序,则与

当我在Visual Studio中创建控制台应用程序时,会自动提供一个
cmd
窗口,在该窗口上可以写入和读取文本。这种行为是在哪里形成的?VS是这样做的还是仅仅是编译的.Net程序的结果


另一方面,VS如何钩住System.Diagnostics.Debug.WriteLine(“这是魔术”)直到输出窗口?

编译控制台应用程序时,它会创建一个.exe文件,该文件是控制台应用程序。如果您启动该exe,例如从windows资源管理器启动,则会调用cmd窗口。如果您在没有调试器的情况下运行该应用程序,则与从run命令或windows资源管理器运行该应用程序基本相同。

控制台行为是exe中PE头的一部分;有一个标志来区分控制台和windows应用程序。此标志的值几乎是windows exe和console exe之间唯一的根本区别(您仍然可以从console exe等创建表单,并且您可以从windows exe写入控制台,尽管您将看不到任何内容)

如果您想使用此标志,可以使用
editbin
切换此标志,尤其是
/subsystem:windows
标志


调试输出是因为调试器附加到预定义的跟踪点以收集输出。如果按ctrl+f5,它将在不附加任何这些挂钩的情况下运行,因此您可以更接近于直接从shell运行它。

此标志可以在VS中设置还是在编译的exe中设置?@aligray-该标志在生成的exe中。您可以在VS中通过在windows exe和console exe之间进行选择来选择它。如果要查看windows exe的控制台输出,请使用P/Invoke调用
[alloconsole
]()。您可以更改输出类型设置以在Winforms应用程序(项目+属性,应用程序选项卡)中获取控制台窗口。VisualStudio宿主进程(项目+属性,调试选项卡)将Console.Write()输出重定向到IDE的输出窗口。