在過去的幾個月中,我一直在爲我的公司開發一個副項目,但是現在的高層們已經認定它適合現有的產品。我是否可以將代碼合併到我正在與非代碼合同開發人員使用的代碼庫合併的代碼中?
我一直在開發使用微軟的代碼合同靜態類型檢查(部分原因是因爲我沒有使用過他們,渴望學習)的側項目。
我的問題是,如果我在我的代碼檢查與地方的合同代碼庫,將所有其他開發者需要安裝能夠繼續開發代碼契約工具?我知道一個事實,他們都沒有安裝它,我在這裏是小三,所以我懷疑我可以說服他們都接受它。
我使用的是.Net 4.5,所以包含代碼合同庫,但我想知道如果Visual Studio會抱怨他們沒有在構建選項中指定的CONTRACTS_FULL
每次他們去構建,或者,如果我在構建選項中保留CONTRACTS_FULL
,另一個開發人員嘗試構建時會發生什麼?此外,我想知道當合同失敗時最終產品將如何行事,但代碼並未使用代碼合同重寫器構建。
我用一個項目創建了一個新的解決方案。創建了一個簡單的函數,解除代碼合同違約,代碼合同被卸載,並且未指定CONTRACTS_FULL
。建立並運行它,並收到以下錯誤:
Run-time exception (line 8): An assembly (probably "hdxticim") must be rewritten using the code contracts binary rewriter (CCRewrite) because it is calling Contract.Requires<TException> and the CONTRACTS_FULL symbol is defined. Remove any explicit definitions of the CONTRACTS_FULL symbol from your project and rebuild. CCRewrite can be downloaded from http://go.microsoft.com/fwlink/?LinkID=169180.
After the rewriter is installed, it can be enabled in Visual Studio from the project's Properties page on the Code Contracts pane. Ensure that "Perform Runtime Contract Checking" is enabled, which will define CONTRACTS_FULL
我認爲錯誤消息需要重寫,因爲CONTRACTS_FULL絕對沒有指定。
感謝MatíasFidemraizer,我們發現在使用Contract.Requires<TException>()
而不是Contract.Requires()
時發生這種情況。
理想情況下,我想修改此行爲使合同的觸發提供的異常,好像它是一個普通保護語句而不是抱怨重寫。
Here's a fiddle證明了問題:https://dotnetfiddle.net/cxrAPe
我完全不理解這個問題。沒有安裝CC的開發人員不會使用*合約編譯整個解決方案*。合同將被忽略,建成的結果將不會有合同。 – 2014-09-09 15:49:42
我收到一個錯誤'代碼合約重寫器尚未在此項目上運行,但它指定了CONTRACTS_FULL ...'抱怨合同未由合同重寫器在合同失敗時重寫,如果它沒有安裝工具。相反,我寧願它拋出在我的'Contract.Requires'調用中指定的異常。我只能假設我的團隊的其他成員會注意到這一點,而且我必須爲了最終版本而構建它。 –
2014-09-09 15:55:01
如果您沒有CC VS擴展名,CC將無法編譯。自.NET 4.0起,.NET Framework中包含'Contract'類,但是它們在未安裝CC的情況下被繞過。 – 2014-09-09 17:26:20