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的Output窗口中。




這需要一個第三方框架,即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"