【问题标题】:Code Contracts Runtime Checking Exception代码合同运行时检查异常
【发布时间】:2012-06-29 13:37:46
【问题描述】:

我们在代码库中使用 Microsoft 的代码合同。

一个项目中有 Contract.Requires 语句,但发布的构建配置没有勾选“执行运行时合同检查”复选框。

当发布版本遇到Contract.Requires 语句时,会生成异常。这最终会逐渐蔓延并在使用代码协定的 Web 服务中导致 System.ServiceModel.CommunicationException

在异常**中没有任何迹象表明这是代码合同问题。

有什么办法可以揭露这是一个代码合约问题?

通过勾选发布构建配置的“执行运行时合同检查”复选框解决了该问题,但最好在运行时提供更好的诊断信息。

** 仍在研究内部异常。

【问题讨论】:

  • 那里似乎有些可疑。当运行时检查被禁用时,重写器应该在构建期间完全去除合同语句。您确定 Requires 实际上是它失败的地方吗?我很想知道最里面的例外是什么。我知道某些版本的 Code Contracts 库会弄乱调试,突出显示错误的行等等。我不知道情况是否仍然如此,但也许这就是你所看到的?
  • 真的吗?哇。有趣的信息,谢谢!仍在挖掘内部异常。
  • 我认为内部异常告诉您您没有启用重写器。
  • @Porges:是的,虽然我没有设法抓住异常或更新问题。这似乎很奇怪:因为未启用重写器而引发异常,但如果您不想运行时检查,则不需要启用重写器。
  • @Porges:谢谢!这解释了我所看到的。

标签: c# code-contracts


【解决方案1】:

始终需要重写器,即使您不想进行运行时检查。该选项的名称具有误导性!如果要关闭运行时检查,则需要启用该复选框,但将下拉菜单设置为“无”。

如果您没有启用重写器,代码将只调用 Contracts 类中的实际方法,这些方法实际上只是重写器访问的虚拟方法。如果你真的调用它们,它们只会抛出一个异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 2023-04-08
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2012-07-17
    • 2011-03-10
    • 2016-07-15
    相关资源
    最近更新 更多