Q
代碼合同在運行時
18
A
回答
31
user manual對此進行了相當詳細的解釋 - 您可以選擇各種選項。每個構建配置可以有不同的設置,在執行時檢查契約,並且它不是「全部或全部」選擇 - 您可以根據可在Visual Studio中調整的設置來強制執行全部,部分或全部合同。
3
在您的項目屬性中,轉到代碼合同,選擇「發佈」配置並取消選中運行時檢查。
12
我有我最喜歡的選項描述on my blog。
總結:
- 在發佈模式,我建議取消選中執行運行時檢查合同,但選擇建設合同參考大會。這將把先決條件放置在一個單獨的dll中,客戶可以選擇使用它(如果它們檢查呼叫站點需求檢查),但是如果它們沒有檢查該選項,則刪除所有的開銷。
- 在調試模式下,將執行運行時合同檢查設置爲完整。
有些人更喜歡先決條件包含在他們的發佈版本。如果通過NuGet分發,這是特別有用的,因爲they don't support Code Contract dlls。對於我的NuGet軟件包,我正在向Release版本中添加Preconditions,但也有單獨下載「Release without Preconditions」的版本。
6
性能差異非常小,不會以明顯的方式影響您的代碼。除非你正在開發一些實時股票交易系統,否則我真的不會擔心它。
至於禁用生產中的代碼,我寧願有代碼合同的附加保護,而不是一些可能模糊的錯誤。代碼合同中的一個錯誤會告訴你究竟違反合同的地點和原因,而不是因爲某些不良數據在調用堆棧樹上傳入5個級別而不得不深入一些深層調用堆棧。
@svanryckeghem和@Stephen克利: 如果您正在使用或計劃使用Contract.Requires<TException>
並沒有啓用「運行時檢查合同」,你會得到關於IL重寫運行時發生故障(ccrewrite.exe)需要以必須遵守代碼合同的使用。然後您將被要求啓用運行時合同檢查以使其發揮作用。
恕我直言,使用Contract.Requires<TException>()
比Contract.Requires()
更有用,因爲您可以控制拋出的異常類型。
相關問題
- 1. Python - 同時運行代碼
- 2. 啓動並運行代碼合同
- 3. 如何在運行時處理代碼合同違規
- 4. 在運行時編譯運行代碼
- 5. 運行時代碼合同是否與ws/ASP.Net兼容?
- 6. 代碼合同運行時檢查異常
- 7. 將在運行時組合框中使用追加 代碼在運行時JQUERY
- 8. 代碼運行但不符合合同中的前提條件
- 9. Java WebStart JNLP:首次運行時運行不同代碼
- 10. 在python中同時運行兩行代碼?
- 11. 在junit中運行代碼時的不同行爲
- 12. Python代碼的行爲與在終端中運行時不同
- 13. 在運行時執行.NET代碼
- 14. 在不同應用中運行代碼
- 15. 在運行python3代碼時在Hackerearth上運行時出錯NZEC
- 16. 運行VS代碼時System.typeloadException
- 17. 代碼運行時間
- 18. 運行時異常代碼
- 19. 有沒有辦法讓MsBuild運行代碼合同的靜態合同分析?
- 20. 是否有任何理由不使用代碼合同進行運行時合同檢查?
- 21. iOS在不同版本的代碼中運行代碼
- 22. excel VBA代碼在加入時運行,但不在運行時運行
- 23. 在Visual Studio代碼中同時運行兩個項目
- 24. 在運行時編譯java代碼
- 25. 在特定時間運行VBA代碼
- 26. 在初次運行時繞過代碼
- 27. 在運行時的C#代碼?
- 28. 在運行時未找到代碼
- 29. 在編譯時運行任意代碼
- 30. 在運行時動態評估代碼
'Contract.Requires()',我不同意這樣做更有用,我認爲它更像是遺留問題 - 我根本不使用它。合同要求幾乎所有的參數例外,布爾條件是足夠的信息;如果你設計的東西適當。 'Contracts'不僅是執行'Exception'的另一種方式,它們需要不同的方法。 –
nicodemus13
您評論中的操作短語是「...幾乎所有參數例外......」。我不想根據「差不多」來建立合同。如果我可以保證他們都是同一類型的例外,那麼是使用合同。需要()是多餘的。然而,這並不能保證,我寧願涵蓋所有的情況 - 特別是邊緣情況 - 否則你的合約變得無非是猜測。 –