生成菜單下,參照「配置管理器」,C# - Visual Studio 2008能夠進行條件編譯嗎?
有沒有辦法來評論我的C#代碼,以便註釋掉的代碼無法編譯,而解決的辦法是在調試模式下,但如果我改變會編譯它以釋放模式?
爲什麼我要這個?我想要在Release模式下編譯代碼但不在Debug中的原因是我有一些代碼無法從我的開發PC(從我的主機發送郵件的代碼等)中運行。
我不想在發佈之前通過我的代碼運行並取消註釋,我希望它是自動的。
生成菜單下,參照「配置管理器」,C# - Visual Studio 2008能夠進行條件編譯嗎?
有沒有辦法來評論我的C#代碼,以便註釋掉的代碼無法編譯,而解決的辦法是在調試模式下,但如果我改變會編譯它以釋放模式?
爲什麼我要這個?我想要在Release模式下編譯代碼但不在Debug中的原因是我有一些代碼無法從我的開發PC(從我的主機發送郵件的代碼等)中運行。
我不想在發佈之前通過我的代碼運行並取消註釋,我希望它是自動的。
你在找這樣的嗎?
#if DEBUG
Console.WriteLine("Debug Mode");
#else
Console.WriteLine("Release Mode");
#endif
如果你只關心發佈模式下,你可以使用:
#if !DEBUG
Console.WriteLine("Release Mode");
#endif
你可以使用的方法(但代碼而不是單個行)有條件屬性用於此目的
例如以下內容將被編譯成DEBUG版本。
[Conditional("DEBUG")]
public void MyMethod()
{
// Do Stuff
}
DEBUG符號已在項目設置中指定。你必須創建自己的符號發佈版本,「釋放」,這樣就可以做到這一點:
[Conditional("RELEASE")]
public void MyMethod()
{
// Do Stuff
}
不過,我建議你退一步,在你的問題重新從一個更高的期待水平,因爲我不會推薦這個解決方案。
我可能是錯的,但我認爲編譯器會忽略這些註釋。如果我使用.NET Reflector來看我的裝配,我看不到任何我知道存在的評論。
BlueMonkMN的方法將根據編譯模式運行不同的代碼。
如果你想有不同的代碼的運行取決於您所使用的模式編譯(和其他變量),退房PostSharp。這是一個後編譯編譯器,可以爲您的程序集添加和刪除代碼。
示例使用: - 我愛有我的項目詳細的調試和跟蹤信息。 - 我恨有每個方法的結果或方法調用後print
或trace.write
聲明,因爲這額外的調試代碼掩蓋了功能做的工作。
您可以配置PostSharp以動態創建此額外調試信息!一些配置調整,你可以打印每個函數的每一個調用,並且每次調用的結果(具有可變內容)。這使得遵循程序邏輯流程變得非常容易。
我會嘗試用面向對象技術來解決你的問題。使用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容器像Windsor,Unity,Ninject,或者Spring.NET來配置你的開發環境與發佈環境。
您在「條件編譯」中查找的術語。 – Richard 2009-07-11 13:22:05
從你的更新中,我認爲條件編譯並不是你想要的。這是你所要求的,但不是你所需要的。您需要爲您的DEV環境運行的配置,另一個運行在QA中,另一個運行在Production中。我真的會傾向於一個配置或面向對象的解決方案。 – 2009-07-11 13:44:17
Ahhhhh,「有條件彙編」......無法想到這個術語。 – Chaddeus 2009-07-11 13:46:54