[英]So do C#4.0 Code Contracts Actually Do Anything?
在閱讀了受到Spec#令人敬畏的System.Diagnostics.Contracts.Contract
靜態類之后,我很激動,並立即開始通過調用Contract.Requires()
和Contract.Ensures()
來編寫代碼。
我想這只是因為我的代碼是如此超級棒和無錯誤,檢查那些調用實際做了什么直到最近才出現。 一個錯誤滑過,我意識到這些電話沒有做任何事情! 我原以為他們至少會在違反條件時拋出異常,但沒有這樣的運氣。
我錯過了什么嗎? 有誰知道這是什么意思?
從MSDN的合同類頁面 :
您必須使用二進制重寫器來插入合同的運行時強制執行。 否則,Contract.Ensures方法之類的合同只能進行靜態測試,並且如果違反合同,則不會在運行時拋出異常。 您可以從MSDN DevLabs網站上的Code Contracts下載二進制重寫器CCRewrite。 CCRewrite附帶一個Visual Studio加載項,使您可以從項目“屬性”頁面激活運行時合同實施。 二進制重寫器和Visual Studio加載項不隨Visual Studio 2010或Windows SDK一起提供。
擴展JSBangs的答案:
您必須在此處選中“執行運行時合同檢查”框:
(我還檢查了“靜態檢查> Peform靜態合同檢查”框)
如果您希望.Requires
調用拋出錯誤,您需要在項目設置中設置一個選項或使用.Requires<T>
調用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.