如何安装和使用代码合同?

Nir*_*rMH 14 c# visual-studio-2010 code-contracts

我有一个基本的问题,可能是这么明显,但由于某种原因,我似乎无法成功安装和使用代码合同.

我从MSDN下载了软件包,按照在线文档安装了它,但我仍然收到以下代码语句的IDE警告:

Contract.Requires(inputParameter != "");

IDE警告是:

"跳过方法调用.编译器不会生成方法调用,因为该方法是有条件的,或者是没有实现的部分方法"

在启用代码合同的过程中我遗漏了什么?我正在使用VS2010 Ultimate SP1

Dav*_*yon 12

最有可能的原因是代码合同未在项目设置中配置.如果转到项目属性,则应看到"代码约定"选项卡.在选项卡上,选择您正在构建的模式(Debug | Release | Both),然后选中相应的复选框以启用Code Contracts功能.

我已经看到了在未将代码合约设置为时详细说明的警告Build.

如果您没有看到"代码约定"选项卡,则可能需要在计算机上安装"代码约定".通过从此处下载并安装安装程序来完成此操作.


Mat*_*dge 5

条件编译全部来自编译器预处理器定义.这与DEBUG常量使用的方法相同,尽管Visual Studio隐藏了复选框后面的定义.这是一种有效的方法,因为当没有定义那些符号时,根本不调用这些方法; 重要的是,传递的参数也不会被评估,因此您可以在代码合同中使用相对昂贵的检查,而不必担心这些检查会减慢发布版本.

微软对代码合同的介绍说:

合同类中的大多数方法都是有条件编译的; 也就是说,只有在使用#define指令定义特殊符号CONTRACTS_FULL时,编译器才会发出对这些方法的调用.CONTRACTS_FULL允许您在代码中编写合同而无需使用#ifdef指令; 你可以生产不同的版本,有些是契约,有些是没有.

虽然这涉及#define在代码中使用以打开代码合同:

#define CONTRACTS_FULL
Run Code Online (Sandbox Code Playgroud)

正如@NirMH在评论中所说的那样,通常最好在项目的条件编译符号中定义它,这样你就可以将它用于某些构建,而关闭其他构建.

条件编译设置

请注意,这CONTRACTS_FULL是您唯一的选择,尽管它的名称显然是为了允许将来进行更细粒度的控制.