Как я могу получить всю ссылку с Отражением + C#

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

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

  • щелкните правой кнопкой по объекту, и выбор "Находят Все Ссылки"
  • Шоу Visual Studio ссылки этого выбранного объекта

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

Я могу сделать это?

10
задан Nathan Koop 27 April 2012 в 19:31
поделиться

4 ответа

Если вы просто хотите найти ссылки Для информационных целей отражатель имеет эту функцию.

http://www.red-gate.com/products/reflector/

2
ответ дан 4 December 2019 в 01:57
поделиться

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

-121--3171129-

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

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

2
ответ дан 4 December 2019 в 01:57
поделиться

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

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

0
ответ дан 4 December 2019 в 01:57
поделиться

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

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

Это говорит, что это не невозможно! Начните с небольших, поддерживающих крошечных подмножеств реального языка, который вы хотите поддерживать, а затем работать ваш путь вверх. Для получения подробной информации о том, как создать собственный механизм регулярных выражений, ознакомьтесь с главой 16 программы на языке сборки . Вам также потребуется хорошее понимание того, как они работают (что даст вам эта глава), и хорошее понимание сборки (см. более ранние главы).

-121--3133487-

Регулярные выражения не существуют в сборке, что кажется немного странным вопросом, поскольку Regex имеют более высокий языковой характер, он не существует на уровне гаек и болтов...

Изменить: Натан, здесь - ссылка, которая может вас заинтересовать. Прокрутите вниз до нижней части страницы;)

Надеюсь, что это поможет, С уважением, Том.

-121--3133490-

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

5
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: