我有一个使用代码合同的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与遇到同样问题的人。 然而除了撞击之外它没有任何反应。
我也发现这条线特有:
C:\ Windows \ system32 ******。dll(1,1):message:CodeContracts:Checked 3154 断言:2821正确(333蒙面)
为什么二进制文件位于system32中?我不认为MSBuild甚至没有对该文件夹的写访问权......
答案 0 :(得分:2)
问题似乎是它在默认情况下查找Microsoft.Contracts(per spec)中的合同类型,因为Microsoft.Contracts不是我正在使用的,所以它不起作用。我正在使用System.Diagnostics.Contracts,它位于mscorlib中。它并没有告诉我这一点,而是它做了一些非感性的事情。我开始查看源代码和found the offending code,但在我看来,这段代码质量很差,所以我放弃了实际发现问题并创建拉取请求。
但是,当您知道时,解决方案很简单:您需要覆盖与mscorlib一起使用Microsoft.Contracts的合同库的默认值,因此只需将以下内容添加到静态分析器的命令行中:
-cclib mscorlib
这至少对我有用。我仍然认为这是由代码合同中的两个错误引起的:
PureAttribute
。