2012-06-19 93 views
7

我想在編譯時使用契約爲我的類型添加驗證,但不幸的是它不起作用。例如下面的代碼在編譯項目時不會導致編譯器錯誤。我應該啓用什麼嗎?Contract.Assert不會拋出編譯錯誤

Contract.Assert(false, "Invalid state!"); 

回答

7

是的,您需要啓用靜態檢查。進入項目屬性並訪問「代碼合同」選項卡。當然,您需要首先安裝靜態檢查器擴展,該IIRC僅適用於Visual Studio Ultimate。有關確切選項的詳細信息,請參閱user documentation

請注意,在初始編譯階段後出現,所以有時會在構建的第一部分和靜態檢查器的結果之間看到延遲。 (這不是一個真正的「編譯器」錯誤 - 這是一個「合同檢查」錯誤。)

+2

A [Code Contracts](http://research.microsoft.com/en-us/projects/contracts/)包中包含合同的靜態檢查器('cccheck.exe'),幾乎可以與除了Express之外的任何版本的VS配合使用。如果你有Ultimate版本,那麼很好,如果你不這樣做 - 不用擔心,那麼Contract就可以和Professional一起工作了。 :) –

+0

用戶文檔不再存在喬恩。項目被轉移到github上。請更新您的鏈接 –

+1

@JohnDemetriou:已更新,但將來如果您已經知道新鏈接,最好只編輯更新鏈接的答案。 –