CONTRACT_FULL已定义,但无法找到定义

时间:2013-07-15 10:41:41

标签: .net vb.net visual-studio-2012 code-contracts ccrewrite

我目前正在研究.NET框架的代码契约。我想做的是使用这些合同,同时避免我的同事被迫为Visual Studio安装所需的扩展并继续按原样工作。

Aber使用合同设置一些方法,并从已执行的应用程序接收已定义CONTRACT_FULL符号但未调用重写器的消息。我检查了我的整个项目,这个符号没有在任何地方定义。这个定义来自何处以及如何摆脱它?

此错误消失的原因是在激活合同重写器的情况下,但正如我所说,我希望避免安装此重写器。

1 个答案:

答案 0 :(得分:1)

消息的其余部分可能表明您正在使用Contract.Requires< TException >

正如文档所述,您拥有以在使用Contract.Requires<TException>时启用运行时检查。原因是您的代码执行依赖于Contract.Requires<T>如果预先条件失败则抛出预期的异常。

另一方面,Contract.Requires(Boolean)仅定义前提条件,不会影响程序的执行。最多,它会在前置条件失败时显示恼人的断言消息。在这种情况下,不需要重写。

该消息有点误导,因为即使您未启用完全运行时合同检查也会导致错误。

要解决此问题,您必须在所有计算机上安装重写器,或切换到使用Contract.Requires(布尔值)。