據我瞭解,像Debug.WriteLine()
這樣的語句不會留在發佈版本的代碼中。另一方面Trace.WriteLine()
將留在版本構建中的代碼中。 什麼是控制這種行爲?定義DEBUG
時,C#編譯器是否會忽略System.Diagnostics.Debug
類中的所有內容?C調試vs跟蹤#
我只是想了解C#的內部,只是好奇。
據我瞭解,像Debug.WriteLine()
這樣的語句不會留在發佈版本的代碼中。另一方面Trace.WriteLine()
將留在版本構建中的代碼中。 什麼是控制這種行爲?定義DEBUG
時,C#編譯器是否會忽略System.Diagnostics.Debug
類中的所有內容?C調試vs跟蹤#
我只是想了解C#的內部,只是好奇。
這些方法使用ConditionalAttribute
來指定它們應該包含在什麼時候。
當DEBUG
被(在殼set DEBUG = 1
)指定爲#define
,經由the command line或系統環境中,標有[Conditional("DEBUG")]
的方法將由編譯器被包括在內。當不包括DEBUG
時,這些方法和對它們的任何調用都將被省略。您可以自己使用此機制以在某些情況下包含方法,並且還可以用於控制Trace
調用,如Trace.WriteLine
(這使用TRACE
定義)。
這是由於ConditionalAttribute
;編譯器將忽略對標記爲有條件的方法的調用,除非定義了該符號。
你可以有你自己:
[Conditional("BLUE")]
void Bar() {...}
定義BLUE時纔會被調用。
注意,有一些限制,使「明確賦值」的工作:
(相同限制適用於partial
方法類似原因)
提示:自己發現此類事物的答案的一種方法是在Red Gate的[.Net Reflector](http://reflector.r)中查看此類方法。 ed-gate.com/download.aspx)。我想你也可以下載框架源代碼。請注意,.Net Reflector將很快停止使用。這是一個非常有用的工具,所以我建議現在下載它。 – Brian 2011-02-17 15:46:44