在Visual Studio 2010中看到控制台的输出了吗?


163

我正在编写带有一些输出(Console.WriteLine("...");)的简单C#程序。问题是,每次运行它时,我都不会在输出窗口中看到程序的输出。

已经检查“程序输出”标签,并且我已经将所有输出重定向到中间窗口,但无济于事。

如何启用查看程序的输出?

我认为问题不出在我的代码上。我尝试运行一个简单的程序,该程序仅输出一个字符串和readline“ ala hello world”,但仍然看不到任何输出。问题是我在错误的位置寻找输出,还是Visual Studio无法正常工作。

debug.write方法也不起作用。

使用debug.Write,这一切都可行,尽管以前没有。在重新启动之前,我遇到了一些麻烦,或者只是需要休息一下,无论哪种方式现在都很好。感谢所有有用的评论=)


7
Visual Studio正在覆盖您的控制台窗口。将其移至另一台显示器。
汉斯·帕桑

Answers:


195

您可以使用System.Diagnostics.Debug.WriteSystem.Runtime.InteropServices方法将消息写入“输出窗口”。


10
System.Diagnostics.Debug.Write(以防OP没有名称空间在起作用)
jonsca 2011年

4
是的,我只是习惯了控制+句号:)
Richard Adnams 2011年

jonsca:我在玩一个名称空间,为什么我只能使用console.writeline,我希望我的程序不只是出于测试原因而将其写入控制台?
r3x 2011年

2
如果您的应用程序是控制台应用程序,则可以使用console.writeline打印到控制台窗口;如果您的应用程序是Windows窗体应用程序,则可以使用debug.write。检查此链接升技更多信息social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/...
理查德Adnams

1
有趣的是不知道,是的,我的应用程序是Windows窗体应用程序,但是我没有尝试使用debug.Write方法遇到同样的问题,它可以编译,并且都是桃红色的,但是在任何地方都看不到输出
r3x 2011年

50

这里有几件事要检查:

  1. 对于console.Write/WriteLine,您的应用必须是控制台应用。(在解决方案资源管理器中右键单击该项目,选择“ 属性”,然后在“ 应用程序”选项卡中查看“ 输出类型 ”组合-应该是“ 控制台应用程序 ”(注意,如果您确实需要Windows应用程序或类库,请请勿仅将其更改为Console App即可Console.WriteLine)。

  2. 您可以System.Diagnostics.Debug.WriteLine用来写入输出窗口(以在VS中显示输出窗口,请转到View | Output)。请注意,这些写入将仅在定义了DEBUG条件的构建中进行(默认情况下,调试构建对此进行定义,并且发布版本不)

  3. 你可以使用System.Diagnostics.Trace.Writeline,如果你想成为能够写入配置的“听众”非调试版本。(默认情况下,这会写入Visual Studio中的“输出”窗口,就像Debug.Writeline


2
我没有看到输出,但是后来意识到必须在调试模式(F5)中运行程序,而不是Ctrl + Shift + F5。谢谢!
Travis Heeter 2013年

System.Diagnostics.Trace.Writeline似乎不起作用,是否还需要为此配置其他功能?
Travis Heeter 2013年

1
«1»—错误的陈述。Mono显示所有应用程序的输出结果。«2»— ofc 问题在于该方法也不会输出到终端。因此,如果没有IDE,就无法在PC上调试应用程序。
Hi-Angel

34

Console.Read();在程序末尾添加一个。它将阻止应用程序关闭,您可以通过这种方式查看其输出。

这是我刚挖出的一个控制台应用程序,它在处理之后但退出之前停止:

class Program
{
    static void Main(string[] args)
    {
        DummyObjectList dol = new DummyObjectList(2);
        dol.Add(new DummyObject("test1", (Decimal)25.36));
        dol.Add(new DummyObject("test2", (Decimal)0.698));
        XmlSerializer dolxs = new XmlSerializer(typeof(DummyObjectList));
        dolxs.Serialize(Console.Out, dol);

        Console.WriteLine(string.Empty);
        Console.WriteLine(string.Empty);

        List<DummyObject> dolist = new List<DummyObject>(2);
        dolist.Add(new DummyObject("test1", (Decimal)25.36));
        dolist.Add(new DummyObject("test2", (Decimal)0.698));
        XmlSerializer dolistxs = new XmlSerializer(typeof(List<DummyObject>));
        dolistxs.Serialize(Console.Out, dolist);
        Console.Read(); //  <--- Right here
    }
}

或者,您可以简单地在最后一行添加断点。


2
Console.ReadLine也可以正常工作,您只需按Enter即可继续进行操作,因为Read需要任何标准键。
理查德·阿德南斯

它是Windows窗体应用,并且debug.write或console.writeline方法似乎都可以正常工作
r3x 2011年

Euhm,为什么要从Windows Form应用程序输出到控制台?我建议改为在表单或Dialgbox上输出。或制作一个控制台应用程序……
Vincent Vancalbergh 2011年

是的,已经向我指出过,这对我来说只是一个愚蠢的错误,仍然要
多加注意

Console.Read()使控制台窗口获得焦点,因此出现在VS的前面。如果仅在Console.Write()之后放置一个断点,则控制台窗口将显示您的输出,但没有焦点,因此可能不可见。
奈杰尔2014年

21

Ctrl+ F5而不是运行程序F5


1
Ctrl + F5无需调试即可启动应用程序,您将不会在输出窗口中看到任何内容。
理查德·阿德南斯

6
这对我有用;我只是想看看程序正在输出什么,没有控制台输出出现。这导致它在运行后保持控制台窗口打开,因此我可以看到输出。
davenpcj

+1,如果您实际上不想调试(显示控制台,并允许读取输出),则为+1。
mlvljr 2014年

8

System.Diagnostics.Debug.WriteLine()会起作用,但是您必须在正确的位置寻找输出。在Visual Studio 2010中,在菜单栏上,单击“ 调试” ->“ Windows” ->“ 输出”。现在,在错误列表旁边停靠的屏幕底部,应该有一个输出选项卡。单击它并再次检查它是否显示了下拉列表上调试流的输出。

PS:我认为输出窗口显示为全新安装,但我不记得了。如果不是,或者是您无意中将其关闭,请按照以下说明进行操作。


0

要保持打开Windows控制台并且不使用其他输出方法而不是标准输出流cout的方法,请转到您的项目名称->属性->链接器->系统。

到达那里后,选择“子系统”选项卡并标记“控制台”(/ SUBSYSTEM:CONSOLE)。完成此操作后,每当要编译时,请使用Ctrl + F5(无需调试即可启动),您的控制台将保持打开状态。:)


我认为它适用于C ++,而不是问题中的C#。
德米特里·费多尔科夫

0

由于某种原因,我经常遇到此问题,我无法理解为什么未提及此解决方案:

单击查看输出(或按住Ctrl并单击W> O)

然后,控制台输出出现在您的“ 错误列表”,“ 本地 ”和“ 监视”窗口所在的位置。

注意:我正在使用Visual Studio 2015。


您提到的“输出”窗口看起来像是由调试器生成的,因为它有很多行与正在加载的程序集,线程启动和停止等有关。这与控制台输出不同。
PeterVermont '16

0

Visual Studio本身涵盖了控制台窗口,请尝试最小化它们相互绘制的Visual Studio窗口。


-1

在Program.cs中,介于:

static int Main(string[] agrs)
{

和其余的代码,添加:

#if DEBUG
    int rtn = Main2(args);
    Console.WriteLine("return " + rtn);
    Console.WriteLine("ENTER to continue.");
    Console.Read();
    return rtn;
}

static int Main2(string[] args)
{
#endif

请添加说明,您的代码如何解决该问题。
Koopakiller

-4

您可以创建2个小的方法,一个可以在程序开始时调用,另一个可以在程序结束时调用。您也可以使用Console.Read(),以便在最后一行写入之后程序不会关闭。

这样,您可以确定何时执行功能以及程序何时存在。

startProgram()
{
     Console.WriteLine("-------Program starts--------");
     Console.Read();
}


endProgram()
{
    Console.WriteLine("-------Program Ends--------");
    Console.Read();
}

由于之前已经说明过Console.Read()的可能性,所以我看不出这个答案如何为问题带来新的信息。
ForceMagic 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.