-Поиск по дневнику

Поиск сообщений в predefglas

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 10.12.2014
Записей:
Комментариев:
Написано: 94

Удаление Code Contracts c помощью Roslyn

Дневник

Суббота, 25 Июня 2016 г. 14:44 + в цитатник
Что такое Code Contracts Code Contracts были созданы командой разработчиков из Microsoft Research в 2008 году. Задача Code Contracts — описывать предположения о состоянии в коде, которые в последующем используются для генерации документации и проверки кода на корректность. Предполагалось, что Code Contracts станут частью платформы .NET и получат поддержку в компиляторе, платформе и Visual Studio. К сожалению, поддержка появилась только на платформе в виде классов пространства имен System.Diagnostics.Contracts. Для остального требуются плагины и дополнительные утилиты. В данный момент проект поддерживает SergeyT и еще несколько участников. Поддержка Code Contracts в Mono Для проектов, которые разрабатываются на Windows, инфраструктура Code Contracts понятна и более развита. Есть Build Steps для MSBuild, можно переписывать/верифицировать сборки с помощью утилит, есть плагины для VS и Resharper. Но с Mono дела обстоят не так хорошо, есть самодельный ccrewrite, который ломается на сложном коде. Поддержки в xbuild и MonoDevelop нет, и простым способом собрать проект нельзя. Причины для удаления Code Contracts из проекта: — Внешняя зависимость проекта от утилит Code Contracts, без которых проект не собрать. — Скорость компиляции ниже из-за дополнительного шага в виде перезаписи сборки. — Отсутствие поддержки в Mono. — Неудобств стало больше, чем пользы. Удаление Code Contracts из исходного кода Благодаря проекту Roslyn от Microsoft анализ и обработка исходного кода на C#/VB.NET стали довольно тривиальной задачей. И я выбрал этот путь для удаления Code Contracts из исходного кода. Само решение простое и состоит из CSharpSyntaxRewriter, который пробегает по коду и заменяет проверки Code Contracts на их эквивалент вне Code Contracts. Сам удалитель Code Contract'ов оформлен в виде пакета Nuget, доступен как утилита и работает под Mono. Install-Package CodeContractsRemover И команда на перезапись всех исходников в директории проекта: # code_contracts_remover.exe <Convert|Remove> <directoryPath> > Если вы не хотите попрощаться с контрактами навсегда, то можете использовать данную утилиту как шаг сборки на вашем билд сервере. Ссылки Проект на GitHub Nuget пакет

Метки:  

 Страницы: [1]