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