如何取消定义CONTRACTS_FULL符号?

时间:2013-03-02 13:03:22

标签: c# c-preprocessor code-contracts preprocessor-directive

  

如果,Visual Studio会自动定义 CONTRACTS_FULL 符号   您在项目的“代码合同”选项卡中启用合同检查   属性页面。

     

- C#5.0在果壳中(第518页)

我想禁用/取消定义符号,但它不会出现在项目设置中Conditional compilation symbols标签的Build字段中。

(我对完全禁用代码合同不感兴趣!我只是说将合同检查设置为None不是解决方案。)

如果重要,我想要这样做的原因是因为在我的发布版本中我只想抛出Contract.Requires<TException>,而我根本不想抛出ContractException

我找到的一个“解决方案”是将#undef CONTRACTS_FULL放在每个文件的第一行,它修复了它,但实际上这样做会很糟糕。

(BTW到现在为止VS没有定义CONTRACTS_FULL而且我必须自己定义它,但我想有些设置会意外更改)

2 个答案:

答案 0 :(得分:3)

您无法运行合同工具并取消定义CONTRACTS_FULL符号。这些工具取决于所定义的工具。如果你试图强制这样做,什么都行不通。这就是我们在msbuild脚本中自动定义符号的原因。

Code Contract工具的用户绝不应手动尝试定义或取消定义CONTRACTS_FULL符号,因为它是一个工具控制变量。

答案 1 :(得分:0)

我已经阅读了那本书,并且有一个仅使用Contract.Requires的合同级别。在那之前没有任何选项,但它确实存在于本书的那一部分。 但是,我无法帮助您全局取消INCACTS_FULL。抱歉。我认为,虽然在合同检查级别,它会自动取消。

编辑:是的,你需要把它放在第一级(ReleaseRequired)。