2015-06-04 22 views
2

我有一個使用代碼合同的C#PCL項目。然而在TeamCity上這個項目無法建立,但看起來這個建設在本地是成功的。然而,構建日誌確實聲稱構建確實失敗,但它根本沒有任何理由。CodeContracts看起來沒有理由無法生成

'無法建立警告'被禁用。

我得到一個奇怪的警告:

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):消息:CodeContracts:經過3154個 斷言:2821正確(333掩碼)

爲什麼二進制文件位於system32中?我不認爲MSBuild甚至有寫訪問該文件夾...

回答

2

這個問題似乎是它默認在Microsoft.Contracts尋找合同類型(per spec),它不起作用,因爲Microsoft.Contracts是不是我正在使用的。我正在使用位於mscorlib中的System.Diagnostics.Contracts。它沒有告訴我這個,而是它做了一些非感性的事情。我開始查看源代碼和found the offending code,但在我看來,這段代碼質量很差,所以我放棄了實際發現問題並創建了請求。

但是解決方法很簡單,當你知道:你需要重寫的合同庫,與mscorlib程序Microsoft.Contracts默認的,所以只需添加以下靜態分析器的命令行:

-cclib mscorlib

這對我至少有效。我仍然認爲這是由代碼合同中的兩個錯誤引起的:

  1. 由於警告而使構建失敗。
  2. 它試圖找到PureAttribute在錯誤的程序集中。
相關問題