2013-04-07 76 views
1

要記錄輸出我正在使用以下代碼。在發佈之前刪除日誌System.Diagnostics

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

現在,它總是建議在應用程序提交之前刪除這些日誌。

那麼,我們是否必須刪除這些行,然後才能將它提交給發佈或隱式完成。

是否還有其他更好的方式來記錄C#中的輸出,當它釋放時會將日誌記錄移除到控制檯。我看到Log4Net就是其中之一。

回答

2

System.Diagnostics.Debug類中的所有方法都有ConditionalAttribute,所以在大多數編譯器中,它們不會被編譯到Release版本中(除非您在發行版本中定義DEBUG屬性)。

對於Visual Studio中的編譯器來說,這當然是正確的。

關於log4Net的第二個問題實際上是相反的,如果您決定開始使用log4Net - log4Net調試調用,則需要注意的事項包含在調試構建中,並且如果您將記錄器設置爲調試跟蹤級別(通常使用運行時配置完成)。


1. MSDN的網頁實際上是(IMO)有點不清楚,但這些所謂的職位與我的解釋一致:

System.Diagnostics.Debug.WriteLine in production code

C# Do Debug statements get compiled out when running in Release mode?

1

您可以使用預處理指令:

#if DEBUG 
    System.Diagnostics.Debug.WriteLine("Hello"); 
#endif 

時,你會發現在發行構建配置構建應用程序這條線將被跳過。

+0

感謝。但是如果有100個我曾經使用過的地方,我需要在任何地方添加這個指令。 – weber67 2013-04-07 14:35:22

+1

你確定嗎?我一直認爲由於[ConditionalAttribute],Debug類的方法沒有編譯到Release版本中。這篇文章似乎說同樣的事情http://stackoverflow.com/questions/1600985/system-diagnostics-debug-writeline-in-production-code – 2013-04-07 14:41:57

+0

@DavidHall多數民衆贊成在這。 IDE隱式刪除它以便發佈。我確實檢查過這個文件,但是我對這種語言很陌生,所以錯過了這麼小的東西。 – weber67 2013-04-07 14:55:26