为什么即使运行时检查关闭,Contract.Assert也会抛出一个断言对话框?

时间:2013-09-27 00:18:47

标签: c# code-contracts

我的代码中有很多Contract.Assert个语句。在调试模式下,失败的断言会抛出一个断言失败的对话框。

我有两件事我不明白:

  1. 合同是否不受Rewiter控制?所以我想如果不加以检查,那么就不会强制执行合同。如果不是这种情况,运行时检查复选框控制什么?什么不是?

  2. 为什么抛出Assertion对话框?它们似乎没用,就像在Silverlight中一样,我得到的是一个IE对话框,说断言失败了。我更喜欢例外。

  3. 格雷格

2 个答案:

答案 0 :(得分:0)

1 - 合同是合同,他必须完成,尽管如果没有必要使用合同?也许你可以在合同中使用空标签值。 2 - 断言完成此操作,显示开发人员有一些东西要磨损,这主要用于开发环境,当你投入生产时记得在版本中构建以从IL中排除此验证。

答案 1 :(得分:0)

在DEBUG下也启用了Contract.Assert方法,这就是导致失败的原因。在Release下,你不应该看到它。

如果您需要对话框以外的其他内容,则需要启用重写器,或者使用ContractFailed事件处理程序注册处理程序。