【问题标题】:CodeContracts fails the build for seemingly no reasonCodeContracts 似乎无缘无故地使构建失败
【发布时间】:2015-06-04 10:40:19
【问题描述】:

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

“基于警告构建失败”已禁用。

我收到一个奇怪的警告:

CodeContracts:找不到方法/类型 程序集中的“System.Diagnostics.Contracts.PureAttribute” [项目 路径]\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 断言:2821 正确(333 被屏蔽)

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

【问题讨论】:

    标签: c# .net msbuild code-contracts


    【解决方案1】:

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

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

    -cclib mscorlib

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      相关资源
      最近更新 更多