2012-06-29 82 views
2

我們在代碼庫中使用Microsoft的代碼合同。代碼合同運行時檢查異常

一個項目中有Contract.Requires個語句,沒有發佈具有「Perform Runtime Contract Checking」複選框的構建配置。

當發佈版本碰到Contract.Requires語句時,會生成一個異常。這最終會慢慢上升,並在使用代碼合同的Web服務中導致System.ServiceModel.CommunicationException

在例外情況**中沒有任何跡象表明這是代碼合同問題。

有沒有什麼方法可以揭示這是一個代碼合同問題?

該問題已通過勾選發佈版本配置的「執行運行時合同檢查」複選框得到解決,但最好還是在運行時提供更好的診斷信息。

enter image description here

**仍在努力挖掘到內部異常。

+1

東西似乎很腥。當禁用運行時檢查時,重寫器應該在構建期間完全剝離合同語句。你確定需求是否真的在哪裏失敗?我很想知道最內在的例外是什麼。我知道Code Contracts庫的某些版本會搞亂調試,突出顯示錯誤的行等等。我不知道這是否仍然如此,但也許這就是你所看到的? –

+0

真的嗎?哇。有趣的信息,謝謝!仍在挖掘內部異常。 –

+0

我認爲內部例外是告訴你,你沒有啓用重寫器。 – porges

回答

4

即使您不想運行時檢查,也總是需要重寫器。該選項的名稱是誤導性的!如果您想關閉運行時檢查,則需要啓用該複選框,但將下拉列表設置爲「無」。

如果您沒有啓用重寫器,代碼將只調用Contracts類中的實際方法,這實際上只是重寫器訪問的虛擬方法。如果你真的給他們打電話,他們只會拋出一個異常。