2011-12-14 29 views
5

我需要將一些日誌記錄添加到我的應用程序,並且它需要處於發佈模式,並且我需要確保日誌記錄代碼未在生產中運行。因此,我希望使用#define和#if來確保在轉入生產時刪除日誌語句。我可以從中央文件設置C#預處理器指令嗎?

問題是,我需要在多個文件中進行日誌記錄,並且將#define放在每個文件的頂部是一種痛苦。有沒有辦法建立一個集中的#define?這樣我可以從所有文件中刪除單個#define而不是#define(這意味着我幾乎肯定會忘記一個)。

+0

通過使用依賴注入在生產中通過條件編譯使用空記錄器類,可能會更好。在最終測試和生產之間有不同版本的二進制文件不是最好的... – 2011-12-14 17:50:06

回答

9

在命令行上,使用/define開關。在Visual Studio中,從項目的屬性頁面中選擇「構建」選項卡,然後填寫「條件編譯符號」部分。

考慮使用條件編譯,而不是使用條件編譯,而是使您的日誌記錄方法有條件的方法。這是一個更令人愉快的選擇。這就是Debug.Assert的工作方式;它是一種條件方法,因此如果未定義調試預處理器符號,則編譯器會在代碼生成之前刪除對該方法的所有調用。

又見關於這個問題我的文章:

http://ericlippert.com/2009/09/10/whats-the-difference-between-conditional-compilation-and-the-conditional-attribute/

+0

我對Debug有所瞭解。斷言,但我沒有意識到你可以自己創建這些條件方法。這是一個更好的解決方案,謝謝! – 2011-12-14 18:28:29

1

是的,這通常是在您的構建文件或您使用的創建構建的腳本中完成的。您將其指定爲MSBuild的命令行參數。

1

爲了增加戴夫的回答,全球條件編譯符號,也可以在Visual規定。

  1. 您的項目右鍵單擊並轉到屬性
  2. 轉到Build標籤

您可以指定你喜歡的符號(DEBUG已經開啓默認的調試配置,所以這可能實際上給你你想要的)給定的配置,或者選擇頂部的「All Configurations」來爲所有配置指定某些符號。

1

您是否使用Visual Studio?在項目屬性頁面的「生成」選項卡上,有一個「條件編譯符號」文本框。

1

在任何地方調用日誌記錄。

定義日誌API輸入方法與

[Conditional ("DEBUG")] 
public void WriteDebugMessage(...) 

建立你在調試模式(其中,默認情況下,定義VS 'DEBUG')計劃。這些電話將是您的大會的一部分。

在發佈模式下構建程序(或者 - 從構建定義中刪除DEBUG符號)。這些電話現在是無意義的無操作並且不會運行。

看起來像你想要的?

相關問題