Недавно я написал сообщение qaru.site/questions/389426/..., в котором запрашиваются некоторые библиотеки С#, которые вычисляют показатели, в основном CC... к сожалению, без успеха. Поэтому я собираюсь написать это сам. Я сделал поиск в Интернете, что может быть лучшим подходом, но прежде чем начать, я хотел бы спросить вас, как вы это сделаете.
В настоящее время я между двумя типами подходов
Я больше отношусь к второму подходу, так как разбор исходного кода напрямую не подходит для меня. Я читал о CodeDom, который интегрирован в .Net framework. Я знаю, что он используется для генерации динамического кода. Думаю, я мог бы использовать его для анализа структуры кода, не так ли? Кто-нибудь из вас имеет хорошую отправную точку использования CodeDom, некоторые подсказки, хорошие учебные пособия, с чего начать?
Спасибо
Изменить: Или, возможно, какая-то другая утилита, которая позволяет легко анализировать исходный код (структура типа DOM).
Gendarme выполняет некоторые кодовые метрики (сорта) с помощью Mono.Cecil, возможно, это поможет с тем, что вы пытаетесь выполнить?
Посмотрите Общую инфраструктуру компилятора (CCI) из Microsoft Research.
Поскольку вы заинтересованы в .NET, посмотрите на .NET Reflector
Существует множество плагинов, один из которых вычисляет некоторые основные показатели, включая CC.
Если вы не найдете то, что ищете, почему бы не написать свой собственный..NET Reflector имеет API-интерфейс плагина, предоставляющий тип модели CodeDom, который вы можете легко анализировать (также см. Внизу страница)
См. Инструмент С# показателей, который вычисляет CC и множество других показателей.
Посмотрите эту статью CodeProject. Кажется, это начало того, что вы пытаетесь сделать, но вам понадобятся некоторые дополнения; поскольку код примера в статье не анализирует элементы, а только типы и пространства имен.
Не существует полных парсеров для CodeDOM, о которых я знаю, о которых также упоминается в блоге Team BCL.
Проблема с использованием CodeDom заключается в том, что это один из способов - есть API для генерации кода, но для разбора кода нет. Кажется, я помню, как слышал о некоторых неподдерживаемых/скрытых API, которые анализируют код в структурах CodeDom, но я не уверен.
Также, как вы получите код из самой сборки? Отражение не переходит к IL, но только к членам классов.