【问题标题】:how to install and use Code Contracts?如何安装和使用代码契约?
【发布时间】:2012-12-19 08:51:32
【问题描述】:

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

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

Contract.Requires(inputParameter != "");

IDE 警告是:

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

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

【问题讨论】:

  • 也许这会有所帮助:stackoverflow.com/questions/3461972/…
  • @AdrianFaciu:谢谢,帖子解释了原因,它的解决方案对我有用。只需在项目预处理器定义上定义CONTRACTS_FULL,因为代码合同插件似乎无法正常工作。

标签: c# visual-studio-2010 code-contracts


【解决方案1】:

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

当代码合同未设置为 Build 时,我看到了您详细说明的警告。

如果您没有看到 Code Contracts 选项卡,那么您可能需要在您的计算机上安装 Code Contracts。通过从here 下载并安装安装程序来执行此操作。

【讨论】:

  • 在 VS2017 中仍然如此吗?我安装了代码合同,但没有看到代码合同选项卡。
【解决方案2】:

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

Microsoft's introduction to Code Contracts 这么说:

合约类中的大部分方法都是有条件编译的;也就是说,仅当您使用 #define 指令定义特殊符号 CONTRACTS_FULL 时,编译器才会调用这些方法。 CONTRACTS_FULL 允许您在代码中编写合约而不使用#ifdef 指令;您可以生成不同的版本,有些有合同,有些没有。

虽然这里谈到在代码中使用#define 来开启代码契约:

#define CONTRACTS_FULL

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

请注意,CONTRACTS_FULL 是您拥有的唯一选项,尽管它的名称显然是为了在未来进行更精细的控制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多