2011-04-11 48 views
3

[Obsolete]屬性對於標記已棄用而偏好更好的實現的類非常方便,但它對項目所針對的.Net版本不敏感。版本敏感已廢棄屬性

例如,假設我在4.0之前版本的.NET中使用了自制的ThreadSafeDictionary類。當.NET 4.0推出時,它包含一個名爲ConcurrentDictionary的新類。我希望能夠將ThreadSafeDictionary標記爲[Obsolete],但只有只有如果項目正在爲.Net 4.0編譯。看起來股票ObsoleteAttribute不支持框架版本控制編譯器的警告。

有沒有辦法做到這一點?

+2

也許是迂腐的,但是如果某種方法已經過時,那麼它在所有版本中都已經過時 - 如果您正在編譯2.0版本,它仍然是過時的! (他們應該升級以獲得更適合的類) – 2011-04-11 16:28:02

+1

我不能總是將每個程序升級到最新和最好的框架。例如,我們有一箇中間件平臺,必須在通過廣泛的QA認證之前使用最新版本的框架。與此同時,我們必須能夠部署.Net 3.5,同時開發新的項目/分支,最終將部署到4.0 – 2011-04-11 16:30:49

+0

勞倫斯:這並不意味着它不是過時的;通常情況下,我們被限制使用過時的版本。我與ATG電子商務框架一起工作,並且僅在Sun終止Java 1.5之後的一年內才被證明可以在Java 1.6上運行。瘋狂的時代。 – 2011-04-11 17:24:40

回答

0

我想你可以推出自定義屬性,然後創建一個構建後過程,通過反射搜索屬性來檢查編譯後的代碼。

+0

可能使用自定義的FxCop規則 – CodesInChaos 2011-04-11 17:49:19