2016-06-01 4 views
0

Я создаю тип с отражением с помощью кода от this answer. И я хочу добавить функцию к этому классу (возможно, используя ILGenerator). А в разделе комментариев this answer, Sergey Mirvoda отметил, что ILGenerator испускают команды можно получить, просто выполнив следующие действия: скомпилировать его в сборку и открыт с рефлектором, переключиться в режим просмотра IL и вы увидите код, который copypastableПолучение Reflection.Emit коды для фрагментации кода в C#

Я не хочу декомпилировать, чтобы получить потерянный код. Поэтому я не ищу декомпилятор. Я пытаюсь получить коды IL Emit для кода примера, который у меня есть. Декомпиляция может просто сделать трюк. Однако могут быть другие решения и, надеюсь, не требующие сторонних приложений.

Я использую VS Ultimate 2013. Есть ли способ сделать это с помощью VS? Или мне нужно использовать сторонние приложения?

+0

Вы можете использовать Telerik JustDecompile для * free *. – christiandev

+0

или ILSpy, который поставляется с исходным кодом –

+0

Возможный дубликат [A .net дизассемблер/декомпилятор] (http://stackoverflow.com/questions/578883/a-net-disassembler-decompiler) –

ответ

0

Если вы хотите получить IL опкоды, например:

ldarg.0 
conv.i8 
dup 
mul 
ret 

Тогда у вас есть несколько вариантов, в том числе ILDASM (входит в состав Windows SDK), dotPeek в Зритель IL или табуляция IL LINQPad в (все из них бесплатно).

Если вы хотите инструмент, который автоматически генерирует код Reflection.Emit и т.д .:

il.Emit(OpCodes.Ldarg_0); 
il.Emit(OpCodes.Conv_I8); 
il.Emit(OpCodes.Dup); 
il.Emit(OpCodes.Mul); 
il.Emit(OpCodes.Ret); 

Тогда только один я знаю это ReflectionEmitLanguage дополнение к отражателю (который оплачивается).

+0

https://msdn.microsoft .com/en-us/library/system.reflection.emit.ilgenerator (v = vs.110) .aspx ILGenerator позволяет вам делать то, что вы показываете во втором фрагменте. – user9993

+0

@ user9993 Да, я знаю. Мой ответ о том, как декомпилировать существующий код в код, который можно использовать с 'ILGenerator'. – svick