Нахождение собственности рассчитывает с отражением

У меня есть сгенерированный файл с около 10000 открытых статических свойств и методов. Я подозреваю, что нетривиальное число из них полностью не используется, но есть около 50 сборок и миллионы строк кода, которые необходимо проверить.

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

Это возможно с помощью рефлексии, или мне нужно вернуться к инструментам анализа кода? Существуют ли библиотеки, которые могут анализировать сборки, чтобы найти их зависимости в другой сборке?

2 ответа

Решение

Функция ReSharper "Find Usages Advanced" позволяет найти ссылки в библиотеках, а также в текущем решении. Я не использовал эту особенность, поэтому я не уверен, насколько хорошо она работает (функция Find Usages в решении работает очень хорошо), но вы можете получить пробную версию ReSharper и попробовать ее. Я предполагаю, что вам нужно запустить его из Решения, в котором есть Проект со ссылками на различные библиотеки, которые вас интересуют.

Я не думаю, что это можно сделать с помощью "регулярного" отражения, поскольку использование не может быть обнаружено, если рассматривать только структуру классов. Я думаю, вам нужно разобрать ИЛ и проанализировать его, ища call, calli, а также callvirt инструкции (поиск свойств также является вызовом метода). Вы можете получить IL для метода с typeof(SomeType).GetMethod("Method").GetMethodBody().GetILAsByteArray(), но это может быть трудно проанализировать, когда он имеет форму байтового массива. Возможно, вы захотите заглянуть в Сесил, который может помочь вам проанализировать байт-код.

Конечно, для этого уже могут быть инструменты.

Другие вопросы по тегам