2009-07-11 75 views
5

生成菜單下,參照「配置管理器」,C# - Visual Studio 2008能夠進行條件編譯嗎?

有沒有辦法來評論我的C#代碼,以便註釋掉的代碼無法編譯,而解決的辦法是在調試模式下,但如果我改變會編譯它以釋放模式?

爲什麼我要這個?我想要在Release模式下編譯代碼但不在Debug中的原因是我有一些代碼無法從我的開發PC(從我的主機發送郵件的代碼等)中運行。

我不想在發佈之前通過我的代碼運行並取消註釋,我希望它是自動的。

+0

您在「條件編譯」中查找的術語。 – Richard 2009-07-11 13:22:05

+2

從你的更新中,我認爲條件編譯並不是你想要的。這是你所要求的,但不是你所需要的。您需要爲您的DEV環境運行的配置,另一個運行在QA中,另一個運行在Production中。我真的會傾向於一個配置或面向對象的解決方案。 – 2009-07-11 13:44:17

+0

Ahhhhh,「有條件彙編」......無法想到這個術語。 – Chaddeus 2009-07-11 13:46:54

回答

10

你在找這樣的嗎?

#if DEBUG 
    Console.WriteLine("Debug Mode"); 
#else 
    Console.WriteLine("Release Mode"); 
#endif 

如果你只關心發佈模式下,你可以使用:

#if !DEBUG 
    Console.WriteLine("Release Mode"); 
#endif 
10

你可以使用的方法(但代碼而不是單個行)有條件屬性用於此目的

例如以下內容將被編譯成DEBUG版本。

[Conditional("DEBUG")] 
public void MyMethod() 
{ 
    // Do Stuff 
} 

DEBUG符號已在項目設置中指定。你必須創建自己的符號發佈版本,「釋放」,這樣就可以做到這一點:

[Conditional("RELEASE")] 
public void MyMethod() 
{ 
    // Do Stuff 
} 

不過,我建議你退一步,在你的問題重新從一個更高的期待水平,因爲我不會推薦這個解決方案。

-3

我可能是錯的,但我認爲編譯器會忽略這些註釋。如果我使用.NET Reflector來看我的裝配,我看不到任何我知道存在的評論。

BlueMonkMN的方法將根據編譯模式運行不同的代碼。

如果你想有不同的代碼的運行取決於您所使用的模式編譯(和其他變量),退房PostSharp。這是一個後編譯編譯器,可以爲您的程序集添加和刪除代碼。

示例使用: - 我有我的項目詳細的調試和跟蹤信息。 - 我恨每個方法的結果或方法調用後printtrace.write聲明,因爲這額外的調試代碼掩蓋了功能做的工作。

您可以配置PostSharp以動態創建此額外調試信息!一些配置調整,你可以打印每個函數的每一個調用,並且每次調用的結果(具有可變內容)。這使得遵循程序邏輯流程變得非常容易。

4

我會嘗試用面向對象技術來解決你的問題。使用dependency injection,我會構建一個執行必要調試操作的類。

是這樣的:現在

public class MyClass { 

    public MyClass(IDoOtherStuff stuffToDo) { 
     DoOtherStuff = stuffToDo; 
    } 

    private IDoOtherStuff DoOtherStuff { get; set; } 

    public void Do() { 
     DoOtherStuff.BeforeDo(); 

     // Blah blah blah.. 

     DoOtherStuff.AfterDo(); 
    } 
} 

public interface IDoOtherStuff { 
    void BeforeDo(); 
    void AfterDo(); 
} 

public class DebugOtherStuff : IDoOtherStuff { 
    public void BeforeDo() { 
     Debug.WriteLine("At the beginning of Do"); 
    } 

    public void AfterDo() { 
     Debug.WriteLine("At the end of Do"); 
    } 
} 

public class ReleaseOtherStuff : IDoOtherStuff { 
    public void BeforeDo() { } 
    public void AfterDo() { } 
} 

,您可以使用Inversion of control容器像WindsorUnityNinject,或者Spring.NET來配置你的開發環境與發佈環境。

相關問題