Как я могу получить все ссылки с помощью Reflection + C # - PullRequest
10 голосов
/ 31 января 2010

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

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 31 января 2010

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

2 голосов
/ 31 января 2010

Если вы просто ищете ссылки в информационных целях, Reflector имеет эту функцию.

http://www.red -gate.com / продукты / отражатель /

2 голосов
/ 31 января 2010

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

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

0 голосов
/ 01 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...