2010-05-21 38 views
15

在閱讀了受Spec#I迷人影響的System.Diagnostics.Contracts.Contract靜態課程之後,我立即開始用Contract.Requires()Contract.Ensures()調用我的代碼。那麼C#4.0代碼合同實際上是否還在做什麼?

我想這只是因爲我的代碼太超級棒了,並且沒有bug,所以檢查那些調用實際上做了些什麼,直到最近纔出現。一個錯誤悄然而至,我意識到這些電話不會做任何事情!我會認爲他們至少在違反條件時拋出異常,但沒有這樣的運氣。

我錯過了什麼嗎?有誰知道這到底是什麼?

回答

17

the Contract Class page at MSDN

必須使用二進制重寫到 合同 插入運行時執行。否則,合同 的Contract.Ensures方法可能只有 靜態測試,並且不會 在運行時拋出異常,如果違反 合同。您可以從 下載 二進制重寫器CCRewrite MSDN DevLabs Web代碼合同 網站。 CCRewrite附帶了一個Visual Studio加載項,使您能夠從項目屬性頁面激活 激活運行時合同執行 。 二進制重寫器和Visual Studio 加載項不隨Visual Studio 2010或Windows SDK一起提供。

0

如果你想.Requires電話扔你需要在項目設置來設置一個選項或使用.Requires<T>呼叫

+2

你是什麼意思?什麼選擇?我正在使用.Requrires() – 2010-05-21 16:23:56

+0

在項目屬性下,前往「代碼合同」選項卡。 – porges 2010-05-26 01:25:19

2

擴展在JSBangs'回答錯誤:

您必須勾選「執行運行時合同檢查 「框位置:

enter image description here

(我還檢查了」 靜態檢查> [執行爲static c合同檢查「框)

+1

另外值得注意的是[代碼合同visual studio擴展](http://visualstudiogallery.msdn.microsoft.com/02de7066-b6ca-42b3-8b3c-2562c7fa024f),它將試圖解析你的合同並告訴你在你面前的問題甚至建立。 – 2013-09-24 22:42:29

相關問題