2009-07-08 26 views

回答

4

[ConditionalAttribute(「DEBUG」)]僅用於優化out方法調用。

如果你真的想從你的版本中刪除這些,你可以使用#ifdef,以便代碼只在發佈模式下編譯。

要記住的一件事是,你仍然可以在發佈模式下調試二進制文件,只要你有pdb文件它應該不重要。發佈模式只是更快地清理變量並應用一些編譯器優化

+0

走得更遠會有辦法找出這些信息是否保存在這些.pdb文件中?如果發佈「二進制」沒有他們,它會沒事的。 – MighMoS 2009-07-08 18:38:56

0

我認爲這將是一個壞主意,因爲很多時候你附加屬性的東西除了在調試器IMO中顯示它之外還有其他一些用途。

+0

我想你可能誤解了。我想編譯出屬性,而不是類。 – MighMoS 2009-07-08 18:37:26

3

因爲我經常需要在Release配置版本中調試沒有DEBUG指令的東西,所以我不想讓這些提示去除調試器。但是,如果您在調試過程中顯示某些東西時顯示某些專有或機密信息,而您不想將其加入到發佈版本中,則可能需要考慮使用ConditionalAttribute#if/#elif/#endif預處理器指令來控制發佈到您的發佈版本中的內容。

例如,你可以這樣做:

#if DEBUG 
[DebuggerDisplay...] 
#endif 
public class MyAwesomeClass 
{ 
} 

這將確保被賦予了DEBUG指令時的屬性只發出。

1

我會分享一個我使用partial來欣賞的模式。

public partial class MyClass{ 
    //class details here 
} 

然後在別處:

#if DEBUG 
[DebuggerDisplay("DebuggerValue")] 
public partial class MyClass{ 
    //anything needed for debugging purporses 
} 
#endif 

這給使用DebuggerDisplay或其他屬性而不會干擾行動的基類的能力。

我一直在使用幾個文件,全部包裝在#if DEBUG中以保存這些調試部分。它有助於保持核心類更清晰,並且我不必記住爲每個屬性開始/結束編譯器指令。

相關問題