CodeContracts因为看似没有理由而无法构建

时间:2015-06-04 10:40:20

标签: c# .net msbuild code-contracts

我有一个使用代码合同的C#PCL项目。但是在TeamCity上,项目无法构建,但看起来构建在本地成功。但是,构建日志确实声称构建确实失败了,但它根本没有任何理由。

'基于警告构建失败'已被禁用。

我收到一个奇怪的警告:

  

CodeContracts:找不到方法/类型   程序集中的'System.Diagnostics.Contracts.PureAttribute'[项目   路径] \包\ Microsoft.Net.Http.2.2.29 \ lib中\便携式net40 + SL4 + win8的+ wp71 + wpa81 \ System.Net.Http.dll'

搜索谷歌给了我one relevant result与遇到同样问题的人。 然而除了撞击之外它没有任何反应。

Build log

我也发现这条线特有:

  

C:\ Windows \ system32 ******。dll(1,1):message:CodeContracts:Checked 3154   断言:2821正确(333蒙面)

为什么二进制文件位于system32中?我不认为MSBuild甚至没有对该文件夹的写访问权......

1 个答案:

答案 0 :(得分:2)

问题似乎是它在默认情况下查找Microsoft.Contracts(per spec)中的合同类型,因为Microsoft.Contracts不是我正在使用的,所以它不起作用。我正在使用System.Diagnostics.Contracts,它位于mscorlib中。它并没有告诉我这一点,而是它做了一些非感性的事情。我开始查看源代码和found the offending code,但在我看来,这段代码质量很差,所以我放弃了实际发现问题并创建拉取请求。

但是,当您知道时,解决方案很简单:您需要覆盖与mscorlib一起使用Microsoft.Contracts的合同库的默认值,因此只需将以下内容添加到静态分析器的命令行中:

-cclib mscorlib

这至少对我有用。我仍然认为这是由代码合同中的两个错误引起的:

  1. 由于警告而导致构建失败。
  2. 它试图在错误的程序集中找到PureAttribute