Анализ структуры кода с использованием CodeDom?

2

Недавно я написал сообщение qaru.site/questions/389426/..., в котором запрашиваются некоторые библиотеки С#, которые вычисляют показатели, в основном CC... к сожалению, без успеха. Поэтому я собираюсь написать это сам. Я сделал поиск в Интернете, что может быть лучшим подходом, но прежде чем начать, я хотел бы спросить вас, как вы это сделаете.

В настоящее время я между двумя типами подходов

  • Для каталога исходного кода, для синтаксического анализа исходного кода с помощью выражений регулярных выражений или аналогичного для идентификации конструкций, таких как методы, условные операторы и т.д. для возможности вычисления CC
  • Учитывая сборку, загрузите ее и проанализируйте ее (используя CodeDom?)

Я больше отношусь к второму подходу, так как разбор исходного кода напрямую не подходит для меня. Я читал о CodeDom, который интегрирован в .Net framework. Я знаю, что он используется для генерации динамического кода. Думаю, я мог бы использовать его для анализа структуры кода, не так ли? Кто-нибудь из вас имеет хорошую отправную точку использования CodeDom, некоторые подсказки, хорошие учебные пособия, с чего начать?

Спасибо

Изменить: Или, возможно, какая-то другая утилита, которая позволяет легко анализировать исходный код (структура типа DOM).

  • 0
    Я не думаю, что вы можете загрузить график CodeDOM из уже скомпилированной сборки ...
  • 0
    а из исходного кода? Это будет возможно?
Показать ещё 3 комментария
Теги:
metrics
code-metrics
codedom

6 ответов

3

Gendarme выполняет некоторые кодовые метрики (сорта) с помощью Mono.Cecil, возможно, это поможет с тем, что вы пытаетесь выполнить?

1

Посмотрите Общую инфраструктуру компилятора (CCI) из Microsoft Research.

0

Поскольку вы заинтересованы в .NET, посмотрите на .NET Reflector

Существует множество плагинов, один из которых вычисляет некоторые основные показатели, включая CC.

Если вы не найдете то, что ищете, почему бы не написать свой собственный..NET Reflector имеет API-интерфейс плагина, предоставляющий тип модели CodeDom, который вы можете легко анализировать (также см. Внизу страница)

0

См. Инструмент С# показателей, который вычисляет CC и множество других показателей.

  • 0
    спасибо, я посмотрю на это
0

Посмотрите эту статью CodeProject. Кажется, это начало того, что вы пытаетесь сделать, но вам понадобятся некоторые дополнения; поскольку код примера в статье не анализирует элементы, а только типы и пространства имен.

Не существует полных парсеров для CodeDOM, о которых я знаю, о которых также упоминается в блоге Team BCL.

0

Проблема с использованием CodeDom заключается в том, что это один из способов - есть API для генерации кода, но для разбора кода нет. Кажется, я помню, как слышал о некоторых неподдерживаемых/скрытых API, которые анализируют код в структурах CodeDom, но я не уверен.

Также, как вы получите код из самой сборки? Отражение не переходит к IL, но только к членам классов.

  • 0
    Я не могу использовать Reflection, вы правы. Но нельзя ли загрузить код, представленный в виде строки, в CodeDom, а затем пересечь структуру CodeDom? Этот инструмент, кажется, использует такой подход: предвидениеminds.com/Content/Products/devMetrics/…
  • 0
    Я давно не изучал CodeDom, но в то время не было парсеров. Вы уверены, что devMetrics работает на сборках, а не на самом коде?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню