我们在代码库中使用 Microsoft 的代码合约。
项目中有 Contract.Requires
语句,但发布的构建配置没有勾选“执行运行时契约(Contract)检查”复选框。
当发布版本遇到 Contract.Requires
语句时,会生成异常。这最终会逐渐蔓延并导致使用代码协定的 Web 服务中出现 System.ServiceModel.CommunicationException
。
异常中没有任何迹象表明这是代码契约(Contract)问题。
有什么办法可以揭露这是代码契约(Contract)问题吗?
通过勾选发布构建配置的“执行运行时契约(Contract)检查”复选框解决了该问题,但最好在运行时提供更好的诊断信息。
** 仍在努力挖掘内部异常。
最佳答案
即使您不希望运行时检查,重写器始终是需要的。该选项的名称具有误导性!如果您想关闭运行时检查,则需要启用该复选框,但将下拉列表设置为“无”。
如果您没有启用重写器,代码将仅调用 Contracts 类中的实际方法,这些方法实际上只是供重写器访问的虚拟方法。如果您实际调用它们,它们只会抛出异常。
关于c# - 代码契约运行时检查异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262842/