2013-03-02 59 views
2

Visual Studio中定義了CONTRACTS_FULL符號,如果 啓用合同在代碼檢查自動合同項目 屬性頁的選項卡。如何取消定義符號CONTRACTS_FULL?

- C#5.0一言以蔽之(頁518)

我想禁用/取消定義的符號,但它不會出現在項目設置中Build標籤的Conditional compilation symbols領域。 (我對完全禁用代碼合同不感興趣!因此我只是表示將合同檢查設置爲None不是解決方案)。

如果很重要,我想這樣做的原因是因爲在我的發佈版本中,我只想扔在Contract.Requires<TException>上,我根本不想丟棄ContractException

我發現的一個「解決方案」是將#undef CONTRACTS_FULL放在每個文件的第一行,它修復了它,但實際上這樣做會很糟糕。

(BTW直到現在VS沒有定義CONTRACTS_FULL,我不得不把它定義自己,但我想一些設置意外更改)

回答

3

您無法運行合同工具並取消定義CONTRACTS_FULL符號。這些工具取決於被定義的工具。如果你試圖強制這一點,沒有什麼可以工作。這就是我們在msbuild腳本中自動定義符號的原因。

代碼合同工具的用戶不應該手動嘗試定義或取消定義CONTRACTS_FULL符號,因爲它是一個工具控制變量。

+0

所以沒有辦法只拋出'Requires '異常,從來沒有'ContractException'? – MasterMastic 2013-04-25 10:34:34

+1

@Ken好吧,如果您只使用Requires 合同並運行重寫器,那麼是的,您永遠不會得到ContractExceptions。另一種解決方法是將運行時檢查級別設置爲ReleaseRequires。 – 2013-04-25 14:46:56

0

我讀過的書,並有一個合同級別只使用Contract.Requires。在沒有任何內容的情況下,這是一種選擇,但它絕對是本書中該部分的一個地方。 但是,我無法幫助您全球取消CONTRACTS_FULL。抱歉。我認爲雖然在那個合同檢查水平它自動地被解除。

編輯:是的,你需要把它放在第一級(ReleaseRequired)。