Многие знают, что с июня месяца рефлектор стал платным. За неделю до этого события я решил подыскать себе бесплатную альтернативу. Выбирал среди ILSpy, JetBrains dotPeek и Telerik JustDecompile. Около недели я ими пользовался, и свои наблюдения я фиксировал в файлике. Таким образом, у меня появилась небольшая статья, которая, возможно, кому-нибудь облегчит выбор.
С основной задачей – декомпиляцией кода все приложения справляются достаточно хорошо. Поэтому следующим шагом стал выбор наиболее удобной в использовании замены рефлектора и развитость «второстепенного» функционала.
Наиболее важные для меня критерий выбора декомпилятора были следующие:
- Удобство работы
- Скорость работы (загрузка, поиск типа, декомпиляция)
- Функционал
- Analyze
- Декомпиляция в Visual Basic
- Search MSDN
- Поиск типа, метода, строки.
Естественно, поскольку, удобство работы, это очень нечеткий критерий, то и вывод мой, что мой вывод будет субъективным.
По скорости работы особых нареканий у меня тоже не оказалось. Точнее все работают приблизительно одинаково медленно ;), разве что Telerik JustDecompile грузится немого медленей других.
А вот по развитости второстепенного функционала продукты отличаются довольно сильно.
К сожалению, на текущий момент ни один из декомпиляторов не поддерживают следующие операции:
- Поиск строки
- Поиск выбранного типа в MSDN
- Поиск выбранного типа в Bing
Однако, что поскольку разработка этих продуктов началась сравнительно недавно (февраль 2011) и еще идет полным ходом, функционал может существенно измениться. Поэтому ниже я привожу версии продуктов, между которыми я выбирал.
Далее я приведу скриншоты декомпиляторово и их краткое описание (отличие).
ILSpy билд 1.0.0.822
Очень похож на.NET Reflector. Умеет декомпилировать в C# и IL. Есть приятная функция, которой нет в рефлекторе и в других декомпиляторах – при декомпиляции кода показывает комментарии, что очень удобно.
Единственный из продуктов, который позволяет пометить сразу несколько сборок для удаления.
Telerik JustDecompile Beta билд 2011.1.516.2
Минусы начинаются со скачивания инсталлятора – при скачивании требует регистрации. У меня регистрация была, но в противном случае я бы его не стал скачивать.
Интересное совпадение, пока я писал эту статью JustDecompile показал мне уведомление, что есть обновленние, но что бы его скачать надо было опять вводить регистрационные данные. Лень мне стало их искать и обновление не стал скачивать.
Переборщили они с этим.
Немного не типичный интерфейс пользователя из-за чего создается впечатление что у программы Из рассматриваемых продуктов единственный, который на текущий момент умеет декомпилировать в C# и Visual Basic .NET.
Функция Analyze здесь называется Find Usages. Есть проблемы с поиском типов. Почему-то не всегда находит типы, так же не всегда при поиске типов фокус ввода в поле ввода. Мелочь, а неприятно.
JetBrains dotPeek билд 1.0.0.1219
Наиболее глючный и в то же время наиболее функциональный продукт. Регулярно (но не так часто чтобы надоесть) показывает диалог с просьбой отправить детали ошибки. Несколько раз сталкивался с таким багом. Открываю, например, исходники StringBuilder, затем выбираю интерфейс, который он реализует и исходный текст StringBuilder’а пропадает и больше не появляется. Ниже наглядная демонстрация бага.
Из существенных ограничений – умеет только декомпилировать в C#.
Для тех, кто пользуется решарпером интерфейс и горячие клавиши будут знакомы. Жаль, но не работает как в решарпере поиск элемента по заглавным буквам. Отличается и немного терминология. Т.е. нет команды Analyze, но есть Find Usages и Find Usages Advanced.
Нет панели инструментов с кнопками навигации (как-то привык я к нему в рефлекторе), чтобы перемещаться по коду вперед-назад надо выбирать пункта Navigate главного меню, что откровенно говоря не удобно. К счастью для этих команд горячие клавиши такие же как и в студии по дефолту.
Автоматически не выделяется текущий тип в дереве (но есть специальная команда ;)).
Как видно из скриншота каждый тип открывается в новой вкладке. Вкладки можно перемещать и прикреплять аналогично тому как это делается в студии.
Из интересных новшеств подметил, что dotPeek умеет подгружать с сайта Майросовт реальный исходный код (как это делает студия), но у меня почему-то это не сработало (возможно, тоже какой-то дефект).
Выводы
Меньше всех понравился JustDecompile. Оставлю только на случай если понадобится декомпиляция в Visual Basic .NET. Между ILSpy и dotPeek окончательный выбор я так пока не сделал. Я хоть и пользусь решарпером и нравится мне продвинутая функциональнось dotPeek, но как-то в большинстве случаев ILSpy пользоваться удобней. Возможно, сказывается привычка к .NET Reflector, а ILSpy больше всего на него похож.
9 комментариев:
Хороший обзор.
При всех недостатках описанных приложений они лучше чем ildasm.
PS. Не хочу занудствовать, но все же декомпилятор от JetBrains называется «dotPeek». :)
Спасибо, Коля, поправил.
.NET Reflector 6 is the last free version of .NET Reflector but, unlike previous free editions, it will not expire or force you to update.
Тобишь пока не выйдут полностью адэкватные (субъективно) версии того-же ilspy можно пользоваться.
Откуда это?
Вот что пишет мой рефлектор:
---------------------------
.NET Reflector
---------------------------
This is the last free version of .NET Reflector which will expire May 30. Do you want to download a free 14 day trial of version 7?
---------------------------
Yes No
---------------------------
Здравствуйте. А как с вами связаться? Не нашел никаких контактов. Скажите, пожалуйста, можно ли в каком нибудь декомпиляторе исправить код и тупо "Сохранить"? :) Или нужно обязательно ставить студию и в ней пересобирать? Надо кое что перевести) Распаковал рефлектором, вижу, что надо исправить, а редактора тут вроде как нет)
Нет, такой функции я не знаю. Более того если сборка подписана то еще потребуется и strong name key. что-то похожее можно проверуть с помощью ildasm и ilasm, но я бы не сказал, что это тривиальная задача :)
https://code.google.com/p/simple-assembly-explorer/
И через опкоды править
А вот собсно и описание оных
http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes_fields.aspx
Будем вам очень благодарны, если оставите свои замечания об ошибках dotPeek в баг-треккере JetBrains http://youtrack.jetbrains.com/issues/DOTP Спасибо!
Отправить комментарий