c# - 代码契约运行时检查异常

标签 c# code-contracts

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

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

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

异常中没有任何迹象表明这是代码契约(Contract)问题。

有什么办法可以揭露这是代码契约(Contract)问题吗?

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

enter image description here

** 仍在努力挖掘内部异常。

最佳答案

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

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

关于c# - 代码契约运行时检查异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262842/

相关文章:

c# - EventStore 和 RavenDB 持久化 JsonReaderException

c# - 为什么 Azure WebJob 无法连接到 Azure SQL,显示“"Storage account is of unsupported type ' Blob-Only/ZRS”。支持的类型是 'General Purpose' ?

c# - 是否有代码契约(Contract)的替代方案来声明编码假设?

c# - 代码契约、继承和里氏原理

.net - 为什么代码契约会生成 MyAssembly.Contracts.pdb 文件?

jquery - 有JavaScript的代码契约库吗?

c# - Entity Framework : Mapping existing one-to-many relationship to Model

c# - 预加载程序集 : referenced, 未引用,直到需要时才加载

基于 C# .NET 文档的应用程序操作图

c# - 我如何暗示链接方法的代码契约以避免链接时的多余检查?