Как узнать, какие методы вызывают из метода класса C # - НЕ во время выполнения

У меня есть класс [C#](/tag5179), в котором слишком много кода, и я хочу  `refactor`  его. То, что я хотел бы сделать, - начать со всех  `public methods`  и построить дерево  `дерево`  для каждого из них, показывая, какие другие методы в классе вызываются из него, а затем которые вызывают от ребенка один и т. д.

Это позволит мне увидеть, какие  `private methods`  принадлежат только одному общедоступному методу , который является общим и так далее.

Обратите внимание, что я НЕ хочу делать это во время выполнения, я хочу, чтобы иметь возможность посмотреть на класс, либо непосредственно в  `.cs файле` , либо используя отражение в скомпилированной библиотеке .

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

Какие-нибудь идеи? Опять же, это НЕ проблема времени выполнения, это просто создание многоразовой утилиты, которая поможет реорганизовать негабаритный класс. В решении, над которым я работаю, есть немало, поэтому код снова будет использоваться снова и снова.

Visual Studio 2010 имеет действие «Просмотр иерархии вызовов», где вы можете увидеть все места в своем решении, где вызывается код.

По моему опыту этот статический анализ может быть несколько недостаточным, например, метод можно назвать динамически, используя Reflection, посредством привязки данных, через контейнер для инъекций зависимостей и т. Д.

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