代码合同试图获取构建错误而不是警告

时间:2010-12-20 15:03:53

标签: code-contracts

我正试图通过代码合同获得VS2010 Ultimate以生成错误而不是警告。

我有这个简单的测试程序:

using System.Diagnostics.Contracts;

namespace MyError
{
  public class Program 
  {
     static void Main(string[] args)
     {
         Program prog = new Program();
         prog.Log(null);
     }

     public void Log(string msg)
     {
         Contract.Requires(msg != null);
     }
  }
}

它正确地确定违反了合同:

C:\...\Program.cs(10,13): warning : CodeContracts: requires is false: msg != null

在我的csproj文件中有Debug的这个属性字段:

TreatWarningsAsErrors> true

我是否还需要在项目设置中设置其他内容才能将其变为错误?

2 个答案:

答案 0 :(得分:2)

在这一点看来,微软选择不让这成为可能,但他们正在考虑将来: http://connect.microsoft.com/VisualStudio/feedback/details/646880/code-contracts-dont-listen-to-treat-warnings-as-errors-setting

答案 1 :(得分:1)

问题是代码合同使用重写器。它们显示为警告,因为它们仅在构建完成后计算。

我真的不知道它是如何工作的,但是除非你在编译器中构建代码契约,否则我看不出它们是什么,除了警告/消息。