我的代码中有许多Contract.Assert
语句。在调试模式下,失败的断言会引发断言失败对话框。
对此我有两点不明白:
合同不受 Rewiter 控制吗?所以我想如果不检查它,就不会执行任何合同。如果不是这种情况,运行时检查复选框控制的是什么?什么不是?
为什么会抛出断言对话框?它们似乎有点没用,就像在 Silverlight 中一样,我得到的只是一个 IE 对话框,说断言失败。我宁愿有个例外。
格雷格
我的代码中有许多Contract.Assert
语句。在调试模式下,失败的断言会引发断言失败对话框。
对此我有两点不明白:
合同不受 Rewiter 控制吗?所以我想如果不检查它,就不会执行任何合同。如果不是这种情况,运行时检查复选框控制的是什么?什么不是?
为什么会抛出断言对话框?它们似乎有点没用,就像在 Silverlight 中一样,我得到的只是一个 IE 对话框,说断言失败。我宁愿有个例外。
格雷格
1 - 合同就是合同,他必须完成,尽管如果没有必要,为什么要使用合同?也许您可以在合同中使用空标签值。2 - 断言确实这样做,向开发人员显示有什么东西要磨损了,这主要用于开发环境,当你投入生产时记得构建发布以从 IL 中排除此验证。
在 DEBUG 下也启用了 Contract.Assert 方法,这就是您失败的原因。在 Release 下,您应该看不到它。
如果您想要对话框以外的内容,则需要启用重写器,或者使用 ContractFailed 事件处理程序注册处理程序。