Преобразование IL в код C#
Мне нужно конвертировать IL в код C#. У меня есть сборка, и я читаю эту сборку. Я получаю MethodBody из MethodInfo, и у methodbody есть метод GetILAsByteArraY(), который возвращает байтовый массив, теперь я хочу преобразовать этот IL в код C#. Пожалуйста, помогите мне в решении этого.
12 ответов
Не изобретай велосипед; используйте .NET Reflector Лутца Редера.
Отражатель Lutz Roeder был приобретен и больше не доступен для бесплатной загрузки.
Теперь есть бесплатный (еще раз) инструмент под названием ILSpy. Я нашел, что это очень хорошо, и он будет не только генерировать код C# из IL, но и создаст .csproj
проект, если декомпилировать целую сборку DLL.
Изобретая колесо, несомненно, лучший способ учиться! вам нужно будет создать свой собственный класс, который будет конвертировать iL в C#. Это требует знания языка Intermediate.
Я предполагаю, что вы уже преобразовали байтовый массив в инструкции IL, как мы видим в ildasm.exe, используя Reflection.Emit.OpCodes,OpCode.OperandType,BitConvertor.ReadByte(),BitConvertor.ReadInt32 и т. Д.
Если вы хотите сделать это самостоятельно, вы можете начать со старого Cecil.Decompiler и улучшить его, см. Исходный код и старый пост Jb. Evain анонсирует проект (ссылка вниз).
Давайте посмотрим, смогу ли я получить это первым: .NET Reflector! Это действительно должно быть часто задаваемыми вопросами...
Вы не можете сделать это с помощью Reflector?
Вы можете загрузить сборку и просмотреть ее как VB.net/C#/IL...
Для поисковиков Reflector больше не бесплатен. Но более новый и лучший, не говоря уже о БЕСПЛАТНО, инструмент от Telerik предлагается под названием JustDecompile. Я только что скачал это, и это так здорово, и это просто бета. Видимо телерик обещает бесплатно навсегда.
Позвольте мне первым предложить вам взять копию Отражателя Красных Врат.
В BCL нет инструмента, который бы это делал; Тем не менее, существует отличный инструмент под названием Reflector, для которого вы можете написать свои собственные надстройки. Таким образом, вы можете использовать это, чтобы получить данные, которые вы хотите.
Рефлектор делает это. Возможно, вы могли бы использовать Reflector против Reflector и узнать, как он решает проблему.
Вы также можете сказать, почему вы хотите сделать это - может быть, лучшее решение вашей общей проблемы.
Вы должны просто использовать .NET Reflector, если у вас есть сборка. Также попробуйте файл gen addon.
Возможно, вам стоит попробовать Dis#, если вы не хотите заново изобретать колесо... Это почти лучший инструмент для преобразования кода.NETDASM имеет инструмент, который позволяет конвертировать C# в IL. может тебе стоит взглянуть на это.