如何安装和使用Code Contracts?

15

我有一个基本的问题,可能很显然,但出于某种原因,我似乎无法成功安装和使用Code Contracts。

我从MSDN下载了包,并按照在线文档进行了安装,但我仍然会在下面的代码语句中收到IDE警告:

Contract.Requires(inputParameter != "");

IDE警告是:

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

在启用Code Contracts的过程中我是否遗漏了任何步骤? 我正在使用VS2010 Ultimate SP1


1
也许这可以帮助:https://dev59.com/XXA75IYBdhLWcg3wH1RB - Adrian Fâciu
1
@AdrianFaciu:谢谢,这篇文章解释了原因,它的解决方案对我很有效。只需在项目预处理器定义中定义CONTRACTS_FULL,因为Code Contracts插件似乎无法正常工作。 - NirMH
2个回答

12

很可能是由于项目设置中未配置代码合同导致的。如果您进入项目属性,应该会看到一个代码合同选项卡。在选项卡上,选择您正在构建的模式(Debug|Release|Both),然后通过选中相应的复选框启用代码合同功能。

当代码合同未设置为 Build 时,我已经看到了您详细描述的警告。

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


1
在VS2017中仍然适用吗?我安装了代码合同,但没有看到代码合同选项卡。 - dthal

5
条件编译完全由编译器预处理定义驱动。这与“DEBUG”常量使用的方法相同,尽管Visual Studio在复选框后面隐藏了该定义。这是一种有效的方法,因为当这些符号未定义时,则不会调用方法;重要的是,传递的参数也不进行评估,因此您可以在代码合同中使用相对昂贵的检查,而不必担心这些检查会使发布构建变慢。 Microsoft介绍代码契约表示:
大多数合同类中的方法都以条件编译方式编译;也就是说,仅当使用#define指令定义特殊符号CONTRACTS_FULL时,编译器才会发出对这些方法的调用。CONTRACTS_FULL让您在您的代码中编写合同,而无需使用#ifdef指令; 您可以生成不同的构建版本,有些包含合同,有些则没有。
虽然这谈到了在代码中使用#define打开代码契约的方法:
#define CONTRACTS_FULL

正如@NirMH在评论中所说,通常最好将其定义在项目的条件编译符号中,这样您可以在某些构建中打开它,在其他构建中关闭它。

Conditional compilation settings

请注意,CONTRACTS_FULL 是您唯一的选项,尽管它显然已经被命名为允许在将来进行更精细的控制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接