Простой способ считать строки кода с помощью отражения - PullRequest
4 голосов
/ 19 апреля 2011

Мне нужна (очень грубая) оценка строк кода (без пробелов, без комментариев) .net Assembly (c #).Есть ли простой способ сделать это с помощью отражения?

Я бы предпочел рукописный инструмент (поэтому я спрашиваю об указателях здесь ...), но я бы также согласился с бесплатным (как в речи)tool.

Ниже приведен мой вариант использования:
Я являюсь частью команды, работающей над небольшим проектом, который практически не имеет покрытия кода.У нас есть отчет о покрытии, в котором говорится о 60% -ном расходе (говоря о модульном тесте здесь.) , но в этом отчете не отображаются сборки, у которых вообще нет модульных тестов.Я пишу небольшой инструмент, который можно было бы вызывать для каждой сборки без юнит-тестов (я могу его найти), и создаю XML-файл, похожий на тот, который был создан нашим инструментом покрытия, заявляя, что ничего не было скрыто.В первом приближении к «утверждениям» я подумал, что считаю «строки кода».

Ответы [ 5 ]

5 голосов
/ 19 апреля 2011

Вы не можете считать строки кода, используя отражение. Эта информация недоступна при использовании отражения. Используя рефлексию, вы можете получить подпись членов класса, а также получить необработанный IL внутри этих методов. Однако вы не можете эффективно перевести этот IL обратно в строки кода.

Есть несколько способов сделать это. Вы можете (ab) использовать такой инструмент, как Reflector, и программно вызывать его сборки, чтобы декомпилировать ваши сборки обратно в C # и выполнять подсчет строк, или вы можете собирать информацию из файлов .pdb для получения номеров строк. Эти файлы базы данных программы содержат всю эту информацию. Однако, нет никакого способа прочитать pdbs, используя отражение.

NDepend (инструмент, упомянутый Джерри) использует информацию из файлов .pdb для подсчета количества строк.

Но поскольку вы уже используете инструмент покрытия кода, почему бы вам не добавить пустые проекты модульных тестов для непокрытых сборок и добавить эти тестовые проекты в инструмент покрытия кода. Таким образом, вы можете увидеть общий охват всего проекта. Это будет дешевле, чем покупать NDepend, и намного дешевле, чем почерк счетчика LoC самостоятельно.

4 голосов
/ 17 июня 2011

VS2010 использует Metrics.exe (microsoft).Инструмент считает строки кода из скомпилированных сборок.http://blogs.msdn.com/b/camerons/archive/2011/01/28/code-metrics-from-the-command-line.aspx

2 голосов
/ 19 апреля 2011

А как насчет использования инструмента типа NDepend вместо того, чтобы писать все самостоятельно?

1 голос
/ 19 апреля 2011

Ну, если вы говорите о скомпилированных сборках (как в .dll), то вы не можете легко получить LOC оттуда. Все, что у вас есть, это инструкции IL, и один LOC обычно приводит к созданию нескольких инструкций IL. Если вы хотите свернуть свои собственные, вы, вероятно, захотите взглянуть на Postsharp , который позволяет вам пройти по IL, и вы можете сосчитать все интересные узлы, но при этом у вас остается предположение о том, как рассчитать LOC .

Другим интересным проектом может быть ILSpy , который имеет декомпилятор и может реконструировать исходный код C # (приблизительно). Не уверен, что это сценарий, но с открытым исходным кодом, так что вы можете расширить его для своих нужд.

Вы также можете попытаться извлечь информацию из файлов pdb , если они доступны. Это может быть более простой способ получить доступ к PDB

0 голосов
/ 19 апреля 2011

Отражение дает вам метаданные, а не строки кода. Вместо этого загрузите сборки, выясните классы и модули и выдайте статистику о том, что следующие методы / модули не охватываются!

...