2015-06-04 2 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»

Поиск Google дал мне one relevant result с кем-то, кто имеет такую ​​же проблему. Однако у него нет ответов, кроме натыкающихся.

Build log

Я также считаю эту линию своеобразно:

C: \ Windows \ system32 DLL ****** (1,1):. Сообщение: CodeContracts: проверяемые 3154 утверждения : 2821 correct (333 masked)

Почему бинарный файл находится в системе32? Я не думал, что MSBuild даже имел доступ на запись к этой папке ...

ответ

2

Проблема заключается в том, что она по умолчанию ищет типы контрактов в Microsoft.Contracts (per spec), которая не работает, поскольку Microsoft.Contracts is не то, что я использую. Я использую System.Diagnostics.Contracts, который находится в mscorlib. Это не говорит мне об этом, скорее это делает что-то нечувственное. Я начал изучать исходный код и I found the offending code, но, на мой взгляд, этот код имеет низкое качество, поэтому я отказался от фактического поиска проблемы и создания запроса на перенос.

Однако решение просто, когда вы знаете, вы должны изменить настройки по умолчанию для библиотеки контракта, который Microsoft.Contracts с mscorlib, поэтому просто добавьте следующее в командной строке статического анализатора:

-cclib mscorlib

Это работало для меня как минимум. Я все еще думаю, что это вызвано двумя ошибками в кодовых контрактах:

  1. Не удается построить из-за предупреждения.
  2. Он пытается найти PureAttribute в неправильном сборке.