我正在使用VS2010 Ultimate和Code Contracts。在获得意外的运行时行为后,我查看了反射器中的源代码,并意识到我的不变量没有被编译。生成的__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)]`
有没有人有这个问题或任何有关为什么我的不变量没有按预期工作的见解?