Можно ли использовать переписывание контракта кода без установки VS на сервере сборки CI (TeamCity)?
Да.Установите CodeContracts на сервере сборки.(Если он отказывается устанавливать на компьютер без Visual Studio, просто скопируйте перечисленные ниже файлы и их зависимости на сервер сборки.) После установки вы найдете инструменты CodeContract, установленные в% programfiles% \ Microsoft \ Contracts \Bin.В этом каталоге есть 4 исполняемых файла, которые вас заинтересуют:
ccrewrite.exe - бинарный редактор.Это должно быть выполнено после компиляции.Он превращает ваши контракты в проверки во время выполнения или во все, что вы указываете, в которые вы хотите, чтобы они превратились.
ccrefgen.exe - Это может генерировать ссылки на контрактные сборки вместе с вашими сборками.Это полезно, если вы отправляете dll для использования другими сторонами.
cccheck.exe - Статическая проверка.На сервере сборки вы будете запускать этот инструмент над сборками, содержащими контракты, и он будет выдавать предупреждения и сообщения при возникновении потенциальных проблем.
ccdocgen.exe - при этом создается XMLдокументация из договоров в вашем коде.Возможно, вы захотите использовать это, если вы отправляете dll с контрактами для потребления другими сторонами, или если вам просто нужны внутренние документы для вашего кода.
Есть ли msbuildзадачи для выполнения проверки контракта?
Да.С CodeContracts поставляется 2 задачи MSBuild: в том же каталоге установки CodeContracts проверьте папку MSBuild \ [framework version].В этом каталоге есть 2 файла, которые должны вам помочь: Microsoft.CodeContracts.targets и Microsoft.CodeContractAnalysis.targets.
Согласно документации CodeContracts,
Расширение сценария msbuild Microsoft .Contract.target содержит дополнительные действия по сборке для инструментария контракта времени выполнения и этапов статической проверки.В результате такого подхода можно использовать ту же функциональность при сборке из командной строки с помощью команды msbuild.Использование msbuild для проекта или решения, использующего контракты, включенные через пользовательский интерфейс VS, будет выполнять те же действия, что и соответствующая сборка под VS.
Как вы можете видеть, возможно и поддерживается интеграция инструментов в сборки CI через цели MSBuild.
Используете ли вы проверку Code Contract со сборками CI?
Предполагая, что вы имеете в виду статическую проверку с предупреждениями / сообщениями, я сделал это лично, но не сделал этого в большом проекте.
Надеюсь, это поможет!
Шляпная подсказка к книге Джона Скита C # In Depth для объяснения инструментов командной строки.