CodeContracts似乎无缘无故地使构建失败

本文关键字:构建 失败 无缘无故 CodeContracts | 更新日期: 2023-09-27 17:53:37

我有一个使用代码契约的c# PCL项目。然而在TeamCity上,该项目却失败了,但在当地却获得了成功。然而,构建日志确实声称构建失败了,但它根本没有给出任何原因。

' failed build on warnings'被禁用。

我得到一个奇怪的警告:

CodeContracts:无法找到方法/类型"System.Diagnostics.Contracts。PureAttribute' in assembly '[project .包路径]' ' Microsoft.Net.Http.2.2.29 ' lib ' portable-net40 + sl4 + win8中的+ wp71 + wpa81 ' System.Net.Http.dll '

搜索谷歌给了我一个与有同样问题的人相关的结果。但是,除了碰撞之外,它没有任何响应。

构建日志

我也觉得这行很奇怪:

C:'Windows'system32******.dll (1,1): message: CodeContracts: Checked 3154断言:2821 correct (333 mask)

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

CodeContracts似乎无缘无故地使构建失败

这个问题似乎是默认情况下查找微软的合同类型。合同(每个规格)不起作用,因为微软。我用的不是合同。我用的是System.Diagnostics。合同,它位于mscorlib。它并没有告诉我这些,而是做了一些毫无意义的事情。我开始查看源代码,我发现了违规代码,但在我看来,这段代码质量很差,所以我放弃了实际找到问题并创建拉请求。

然而,解决方案很简单,当你知道:你需要覆盖默认的合同库是微软。与mscorlib契约,因此只需将以下内容添加到静态分析器的命令行:

-cclib mscorlib

这至少对我有效。我仍然认为这是由Code Contracts中的两个bug引起的:

  1. 构建失败,因为有警告。
  2. 尝试在错误的组件中定位PureAttribute