Как я могу получить всю ссылку с Reflection + С#

Используя System.Reflection, я могу получить все методы из определенного класса

Мне нужно знать, каковы ссылки на эти методы. Например: в Visual Studio, если вы хотите, чтобы ссылки на конкретный объект

  • щелкните правой кнопкой мыши на объекте и выберите "Найти все ссылки"
  • Visual Studio показывает ссылки этого выбранного объекта

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

Могу ли я это сделать?

Ответ 1

Это невозможно сделать с отражением. Отражение - это инструмент для проверки метаданных и сборок. Чтобы найти все ссылки на данный метод/тип, вам нужно будет проверить базовый IL сборки. Reflection имеет очень ограниченные возможности IL (просто возвращает его как массив байтов). Вам нужно будет самостоятельно проверить этот поток байтов, чтобы собрать любой контекст о том, на что он ссылается.

Ответ 2

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

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

Ответ 4

Microsoft выпустила Common Compiler Infrastructure проекты под лицензией с открытым исходным кодом. Эти проекты направлены на поддержку многих функций, связанных с компилятором, включая анализ сборок, на который вы ссылаетесь. Документация ограничена, поэтому вам необходимо иметь полное понимание ECMA-335 (Common Language Infrastructure), чтобы эффективно использовать ее для вашего целей.

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