Нахождение собственности рассчитывает с отражением
У меня есть сгенерированный файл с около 10000 открытых статических свойств и методов. Я подозреваю, что нетривиальное число из них полностью не используется, но есть около 50 сборок и миллионы строк кода, которые необходимо проверить.
Я хотел бы запустить какую-то утилиту, которая может просмотреть все скомпилированные сборки, которые у нас есть, и сказать мне, какие именно члены этого класса вызываются, и подсчитать для каждого из них.
Это возможно с помощью рефлексии, или мне нужно вернуться к инструментам анализа кода? Существуют ли библиотеки, которые могут анализировать сборки, чтобы найти их зависимости в другой сборке?
2 ответа
Функция ReSharper "Find Usages Advanced" позволяет найти ссылки в библиотеках, а также в текущем решении. Я не использовал эту особенность, поэтому я не уверен, насколько хорошо она работает (функция Find Usages в решении работает очень хорошо), но вы можете получить пробную версию ReSharper и попробовать ее. Я предполагаю, что вам нужно запустить его из Решения, в котором есть Проект со ссылками на различные библиотеки, которые вас интересуют.
Я не думаю, что это можно сделать с помощью "регулярного" отражения, поскольку использование не может быть обнаружено, если рассматривать только структуру классов. Я думаю, вам нужно разобрать ИЛ и проанализировать его, ища call
, calli
, а также callvirt
инструкции (поиск свойств также является вызовом метода). Вы можете получить IL для метода с typeof(SomeType).GetMethod("Method").GetMethodBody().GetILAsByteArray()
, но это может быть трудно проанализировать, когда он имеет форму байтового массива. Возможно, вы захотите заглянуть в Сесил, который может помочь вам проанализировать байт-код.
Конечно, для этого уже могут быть инструменты.