c# - 写入Visual Studio的输出窗口?


我试图写一个消息到输出窗口进行调试。 我搜索了一个像Java的system.out.println("")这样的函数。 我试过Debug.WriteConsole.WriteTrace.Write 。 它不会给出错误,但它也不会打印任何内容。

检查“定义DEBUG常量”和“定义TRACE常量”选项。

菜单工具选项调试“将所有输出窗口文本重定向到立即窗口”选项未被选中。

配置:活动(调试)

注意:如果相关,我使用向导创建了一个项目为“Windows窗体应用程序”。 我不知道在哪里看。


Answers





这将写入调试输出窗口:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");



使用:

System.Diagnostics.Debug.WriteLine("your message here");



    Debug.WriteLine

是你在找什么。

如果没有,请尝试这样做:

菜单工具选项调试 →取消选中发送输出到立即




对我来说,只有Trace命名空间,而不是调试的工作:

System.Diagnostics.Trace.WriteLine("message");

我正在Visual Studio 2010下的C#项目中工作。




你可能正在寻找

MessageBox.Show()

要么

Debug.Writeline()



电话

System.Diagnostics.Debug.WriteLine("message");

使用.NET Core (V 1.0或1.1)时失败。

我们应该从Microsoft.Extensions.Logging创建和使用一个记录器,但该记录只出现在dotnet.exe弹出控制台窗口中,而不是在Visual Studio的“输出”窗口中。




这需要一个第三方框架,即Serilog ,但我仍然发现它是一个非常顺利的经验,获得输出到某个地方,我可以看到它。

你首先需要安装Serilog的跟踪接收器 。 一旦安装,你需要像这样设置记录器:

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

(您可以设置不同的最低级别或将其设置为配置值或任何正常的Serilog功能,也可以将Trace记录器设置为特定级别来覆盖配置,或者您想要这样做。

然后,您只需正常记录消息,并在“输出”窗口中显示即可:

Logger.Information("Did stuff!");

这看起来不是什么大不了的,所以让我解释一些额外的优点。 对我来说最大的一个问题是,我可以同时登录到输出窗口和控制台

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

这给了我很大的灵活性,我怎么消耗输出,而不必重复所有我的调用Console.WriteDebug.Write 。 编写代码时,我可以在Visual Studio中运行我的命令行工具,而不必担心在退出时丢失输出。 当我部署了它并且需要调试某些东西(并且没有Visual Studio可用)时,控制台输出已经可以供我使用了。 作为计划任务运行时,也可以将相同的消息记录到文件(或任何其他类型的接收器)中。

最重要的是,使用Serilog来做到这一点使得将消息转储到多个目的地非常容易,确保我可以随时访问输出,而不管我如何运行它。

它也需要非常少的设置和代码。




打印到Visual Studio的输出窗口:

Debug.Writeline();



以下在Visual Studio 2015为我工作:

OutputDebugStringW(L"Write this to Output window in VS14.");

这里阅读OutputDebugStringW的文档。

请注意,此方法仅适用于您正在调试您的代码( debug mode




这不是对原始问题的回答。 但是,由于我在找到一个交互式转储对象数据的方法时发现了这个问题,我想其他人可能会从提到这个非常有用的选择中受益。

我最终使用了命令窗口并输入了Debug.Print命令,如下所示。 这将打印一个内存对象的格式,可以复制为文本,这是我真正需要的。

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"