我正在使用带有代码合同的 VS2010 Ultimate。在得到意外的运行时行为后,我查看了反射器中的源代码,并意识到我的不变量没有被编译。生成的__ContractsRuntime
类仅包含Assert
、Ensures
、ReportFailure
和Requires<TException>
的定义TriggerFailure
。对于我的所有子句,我对每种类型都使用[ContractInvariantMethodAttribute]
了一个私有方法。Contract.Invariant(...)
我对配置为装配模式的“标准合同要求”进行了完整的合同检查。
我的程序集文件包含以下程序集属性:
[assembly: RuntimeContracts(RuntimeContractsFlags.InheritContracts | RuntimeContractsFlags.StandardMode | RuntimeContractsFlags.ThrowOnFailure | RuntimeContractsFlags.Assumes | RuntimeContractsFlags.Asserts | RuntimeContractsFlags.Invariants | RuntimeContractsFlags.Ensures | RuntimeContractsFlags.Requires | RuntimeContractsFlags.RequiresWithException | RuntimeContractsFlags.LegacyRequires)]`
有没有人有这个问题或任何见解为什么我的不变量没有按预期工作?