如果,Visual Studio会自动定义 CONTRACTS_FULL 符号 您在项目的“代码合同”选项卡中启用合同检查 属性页面。
- C#5.0在果壳中(第518页)
我想禁用/取消定义符号,但它不会出现在项目设置中Conditional compilation symbols
标签的Build
字段中。
(我对完全禁用代码合同不感兴趣!我只是说将合同检查设置为None
不是解决方案。)
如果重要,我想要这样做的原因是因为在我的发布版本中我只想抛出Contract.Requires<TException>
,而我根本不想抛出ContractException
。
我找到的一个“解决方案”是将#undef CONTRACTS_FULL
放在每个文件的第一行,它修复了它,但实际上这样做会很糟糕。
(BTW到现在为止VS没有定义CONTRACTS_FULL
而且我必须自己定义它,但我想有些设置会意外更改)
答案 0 :(得分:3)
您无法运行合同工具并取消定义CONTRACTS_FULL符号。这些工具取决于所定义的工具。如果你试图强制这样做,什么都行不通。这就是我们在msbuild脚本中自动定义符号的原因。
Code Contract工具的用户绝不应手动尝试定义或取消定义CONTRACTS_FULL符号,因为它是一个工具控制变量。
答案 1 :(得分:0)
我已经阅读了那本书,并且有一个仅使用Contract.Requires的合同级别。在那之前没有任何选项,但它确实存在于本书的那一部分。 但是,我无法帮助您全局取消INCACTS_FULL。抱歉。我认为,虽然在合同检查级别,它会自动取消。
编辑:是的,你需要把它放在第一级(ReleaseRequired)。