2

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

- C# 5.0 简而言之(第 518 页)

我想禁用/取消定义该符号,但它没有出现在项目设置Conditional compilation symbols的选项卡字段中。Build

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

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

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

(顺便说一句,到目前为止 VS 没有定义CONTRACTS_FULL,我必须自己定义它,但我猜有些设置不小心改变了)

4

2 回答 2

3

您不能运行合约工具并取消定义 CONTRACTS_FULL 符号。这些工具取决于所定义的。如果你试图强迫它,什么都不会起作用。这就是我们在 msbuild 脚本中自动定义符号的原因。

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

于 2013-04-25T00:27:28.387 回答
0

我读过那本书,并且有一个只使用 Contract.Requires 的合同级别。这是之前没有的选项,但它肯定在书中那个部分的某个地方。但是,我无法帮助您对 CONTRACTS_FULL 进行全局取消定义。对不起。我认为尽管在那个合同检查级别它是自动取消定义的。

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

于 2013-03-02T14:22:49.730 回答