2013-03-20 31 views
1

我只想定義一個編譯符號,如PROFILE只有當我在Visual Studio中分析C#項目時。在正常的調試或發佈版本中,不應該定義它。如何僅在分析時定義編譯符號?

因此#if和#endif之間的代碼只在分析時編譯。

#if PROFILE 
    DataCollection.StartProfile(ProfileLevel.Process, DataCollection.CurrentId); 
#endif 

它應該是編譯時檢查,沒有運行時檢查。原因在於我們的一些團隊在他們的PC上沒有配置器(不包括在VS 2012標準中),我們希望代碼能夠在任何系統上編譯而不用更改。

回答

2

創建一個新的配置

  • 點擊構建然後選擇配置管理器
  • 點擊有效的解決方案配置並選擇新的
  • 類型Profile名稱並選擇哪個配置將用作模板(用於分析我猜Release)。
  • 確認確定,它會爲您的解決方案中的每個項目創建名爲Profile的新配置。
  • 打開每個項目的屬性,並在Build選項卡中添加PROFILE符號條件編譯符號然後保存屬性。

現在,當你建立了Profile配置PROFILE符號將被定義。我建議你也看看this post,如果你自動化你的構建,你可以使用MSBuild屬性通過命令行(我假設你不經常構建分析)來保持你的PROFILE符號不在解決方案中。

編輯 隨着配置你可以做,但它不會從一個破碎的參考保存你Microsoft.VisualStudio.Profiler.dll)。我建議將所有這些代碼移動到另一個庫,您將發送給他們編譯。在那裏,你會暴露只是一個方法:

public static class ProfilingHelpers 
{ 
    [Conditional("PROFILE")] 
    public static void StartProfiling() 
    { 
     DataCollection.StartProfile(ProfileLevel.Process, DataCollection.CurrentId); 
    } 
} 

在你的代碼會一直叫,但它會僅執行時被定義PROFILE(這樣你就不會需要一個新的配置添加到每個項目,但只有一個DLL)。

相關問題