【发布时间】:2012-06-29 13:37:46
【问题描述】:
我们在代码库中使用 Microsoft 的代码合同。
一个项目中有 Contract.Requires 语句,但发布的构建配置没有勾选“执行运行时合同检查”复选框。
当发布版本遇到Contract.Requires 语句时,会生成异常。这最终会逐渐蔓延并在使用代码协定的 Web 服务中导致 System.ServiceModel.CommunicationException。
在异常**中没有任何迹象表明这是代码合同问题。
有什么办法可以揭露这是一个代码合约问题?
通过勾选发布构建配置的“执行运行时合同检查”复选框解决了该问题,但最好在运行时提供更好的诊断信息。
** 仍在研究内部异常。
【问题讨论】:
-
那里似乎有些可疑。当运行时检查被禁用时,重写器应该在构建期间完全去除合同语句。您确定 Requires 实际上是它失败的地方吗?我很想知道最里面的例外是什么。我知道某些版本的 Code Contracts 库会弄乱调试,突出显示错误的行等等。我不知道情况是否仍然如此,但也许这就是你所看到的?
-
真的吗?哇。有趣的信息,谢谢!仍在挖掘内部异常。
-
我认为内部异常告诉您您没有启用重写器。
-
@Porges:是的,虽然我没有设法抓住异常或更新问题。这似乎很奇怪:因为未启用重写器而引发异常,但如果您不想运行时检查,则不需要启用重写器。
-
@Porges:谢谢!这解释了我所看到的。
标签: c# code-contracts