Сравнение 2 методов сборки с использованием отражения - PullRequest
0 голосов
/ 09 октября 2019

Можно ли сравнить два метода, используя отражение более глубоко?

Например, у меня есть file1.dll и file2.dll. У них обоих есть класс X, у которого есть метод Y, который назван одинаково и делает одно и то же.
Поэтому мой вопрос, возможно ли увидеть тело метода Y разным в этих двух файлах с помощью отражения?

1 Ответ

2 голосов
/ 09 октября 2019

Вы можете использовать MethodBase.GetMethodBody, а затем MethodBody.GetILAsByteArray, чтобы получить MSIL для тела метода в виде массива байтов. Однако, как отмечает вторая ссылка,

Тело метода синтаксического анализа требует глубокого понимания метаданных и форматов инструкций MSIL. Информацию можно найти в документации Common Language Infrastructure (CLI), особенно «Раздел II: определение и семантика метаданных» и «Раздел III: Набор инструкций CIL». Документация доступна онлайн;см. ECMA C # и Стандарты общеязыковой инфраструктуры на MSDN и Стандарт ECMA-335 - Общеязыковая инфраструктура (CLI) на веб-сайте Ecma International.

Даже если два метода имеют одинаковый MSIL, они сделалине обязательно исходить из того же исходного кода C #. Вы можете попытаться декомпилировать MSIL в исходный код C #, используя что-то вроде Mono.Cecil , DelegateDecompiler или ICSharpCode.Decompiler , но я бы не рекомендовал идти внизпо этой дороге и вместо этого предложите пересмотреть ваш подход.

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