2010-09-14 2 views
4

У меня есть сборник. Я хочу программно сравнить метод реализации одного из методов в этой сборке с чем-то, что я ожидаю.Программно сравнить IL двух методов

Есть ли способ сравнить их ИЛ? Даже если я могу получить представление байтового массива любого набора команд, я буду в хорошем месте.

Помогите оценить.

ответ

4

Вы можете попробовать использовать Reflection и сравнить IL, используя массивы байтов.

Взгляните на этот метод: http://msdn.microsoft.com/en-us/library/system.reflection.methodbody.getilasbytearray.aspx

+0

Ты мужчина! Именно этого я и искал. И я смотрел на этот метод около часа назад и использовал его много раз раньше. Никогда не думал об этом, когда мне это нужно. Еще раз спасибо. –

0

вы можете использовать ildasm.exe с визуальной командной строки студии и сделать что-то вроде Ildasm.exe DLL имя

+0

Я имел в виду, что нужно сделать это программно. –

+0

Эта статья может помочь - http://support.microsoft.com/kb/304655 – stack72

0

Вы можете использовать ildasm или reflector для извлечения IL из сборки

3

Вы можете сбросить сборки с помощью ILDASM и дифф две версии, как это:

ildasm /ALL /TEXT assembly1.dll > dump1.txt 
ildasm /ALL /TEXT assembly2.dll > dump2.txt 
fc dump1.txt dump2.txt  
+0

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

4

Использование Mono.Cecil может быть хорошим местом для начала. Cecil - это библиотека, используемая для чтения и модификации сборок CLR, и будет выполнять весь синтаксический анализ файлов для вас до захвата байт-кода CIL.

Другой потенциальной библиотеки вы можете быть в состоянии использовать это Boogie

+1

+1 для Сесил. Эта библиотека потрясающая. – Bobby

 Смежные вопросы

  • Нет связанных вопросов^_^