CodeContracts 构建失败似乎没有任何原因

CodeContracts fails the build for seemingly no reason

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

'Fail build on warnings' 已禁用。

我收到一个奇怪的警告:

CodeContracts: Could not find the method/type 'System.Diagnostics.Contracts.PureAttribute' in assembly '[project path]\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.dll'

搜索 google 让我 one relevant result 找到了一个有同样问题的人。 但是它除了颠簸之外没有任何反应。

Build log

我也觉得这行很奇怪:

C:\Windows\system32******.dll (1,1): message : CodeContracts: Checked 3154 assertions: 2821 correct (333 masked)

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

问题似乎是默认情况下它在 Microsoft.Contracts 中查找合同类型(per spec) which doesn't work because Microsoft.Contracts is not what I am using. I'm using System.Diagnostics.Contracts, which is located in mscorlib. It doesn't tell me this, rather it does something non-sensical. I started looking through the source code and I found the offending code 但我认为这段代码质量很差,所以我放弃了实际发现问题并创建拉取请求。

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

-cclib mscorlib

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

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