2010-07-07 51 views
7

我最近通過代碼合同遷移了很多手動前提條件測試和異常拋出。我一直使用Microsoft.Contracts.dll程序集,而不是升級到.NET 4,所以我可以再堅持.NET 3.5(這是一個由.NET 3.5和.NET 4程序集使用的庫)。我已經在Visual Studio 2010中設置了合同重寫器,並且合同工作得很好。.NET 3.5的代碼合同混淆了VS10的調試器

但是,由於我已經完成了這個轉換,我注意到調試器在有合同的方法中很有趣,特別是在有ContractInvariantMethod的類中。執行光標似乎並不總是與突出顯示的行相匹配,某些斷點無法被命中,並且我有一種方法,調試器無法告訴局部變量名稱,並顯示像CS$1$0000這樣的東西。這是在調試版本中。

在.NET 3.5到VS10中有關於使用代碼合約Microsoft.Contracts.dll的已知問題嗎? .NET 4中的代碼合同是否會出現類似的問題?

[編輯]這個問題使我創建微軟連接錯誤:https://connect.microsoft.com/VisualStudio/feedback/details/573983/code-contract-rewriting-messes-up-local-variable-names-in-iterator-methods-while-debugging

+0

[OT]真棒用戶名:) – roundcrisis 2010-07-07 14:24:13

回答

1

我希望你知道什麼合約重寫意味着—飛行中產生的額外代碼,它沒有任何編譯器鎖定的源代碼。由於CLR有這麼多不同的元素,因此調試器根本不會做或者會感到困惑,只有那些具有廣泛影響的全功能語言特性才能獲得完整調試器支持的預算。比如lambda表達式。

這並不是說提交bug不是一個好的原因,只是當你使用一個甚至還沒有完全開發的方面時,你不應該期望任何東西變得更好。作爲早期採用者總是有這樣的成本,但也有吹牛的權利:-)

+0

是的,我知道外部工具必須和IL一起玩並且移動東西。自從問這個問題以來,我遷移到了.NET 4並且一直沒有被這個問題困擾過。我猜想.NET 3.5代碼合同工具在這方面是不完整的。 – Trillian 2010-07-29 14:09:47

0

心目中,該代碼合同目前還沒有與後置條件&多線程工作。 限制合同只做先決條件重寫。在我們的系統中解決了很多問題的 。

+0

其實在我的情況下,只要打開合同重寫,即使重寫設置爲無,將導致問題。所以postconditions不是問題,我沒有做任何多線程。 – Trillian 2010-07-13 00:01:32