在阅读了受到Spec#强大影响的System.Diagnostics.Contracts.Contract
静态类之后,我很激动,并立即开始通过调用Contract.Requires()
和Contract.Ensures()
来查看代码。
我想这只是因为我的代码非常棒且没有错误,因此检查这些调用确实做了一些事情直到最近才出现。一个错误滑过,我意识到这些电话没有做任何事情!我原以为他们至少会在违反条件时抛出异常,但没有这样的运气。
我错过了什么吗?有谁知道重点是什么?
答案 0 :(得分:17)
来自the Contract Class page at MSDN:
您必须使用二进制重写器 插入运行时强制执行 合同。否则,合同就是这样 作为Contract.Ensures方法可以 只能静态测试,不会 如果a,在运行时抛出异常 合同被违反。你可以下载 二进制重写器CCRewrite来自 MSDN DevLabs Web上的代码合同 现场。 CCRewrite附带一个Visual Studio加载项,使您可以 激活运行时合同执行 从项目属性页面。该 二进制重写器和Visual Studio 加载项不随Visual Studio一起提供 2010或Windows SDK。
答案 1 :(得分:2)
扩展JSBangs的回答:
您必须在此处选中“执行运行时合同检查”框:
(我还检查了“静态检查> Peform静态合同检查”框)
答案 2 :(得分:0)
如果您希望.Requires
调用引发错误,则需要在项目设置中设置选项或使用.Requires<T>
调用