Незаменимых нет? (или чем заменить .NET Reflector)

Многие знают, что с июня месяца рефлектор стал платным. За неделю до этого события я решил подыскать себе бесплатную альтернативу. Выбирал среди ILSpy, JetBrains dotPeek и Telerik JustDecompile. Около недели я ими пользовался, и свои наблюдения я фиксировал в файлике. Таким образом, у меня появилась небольшая статья, которая, возможно, кому-нибудь облегчит выбор.

С основной задачей – декомпиляцией кода все приложения справляются достаточно хорошо. Поэтому следующим шагом стал выбор наиболее удобной в использовании замены рефлектора и развитость «второстепенного» функционала.

Наиболее важные для меня критерий выбора декомпилятора были следующие:

  1. Удобство работы
  2. Скорость работы (загрузка, поиск типа, декомпиляция)
  3. Функционал
    1. Analyze
    2. Декомпиляция в Visual Basic
    3. Search MSDN
    4. Поиск типа, метода, строки.

Естественно, поскольку, удобство работы, это очень нечеткий критерий, то и вывод мой, что мой вывод будет субъективным.

По скорости работы особых нареканий у меня тоже не оказалось. Точнее все работают приблизительно одинаково медленно ;), разве что Telerik JustDecompile грузится немого медленей других.

А вот по развитости второстепенного функционала продукты отличаются довольно сильно.

К сожалению, на текущий момент ни один из декомпиляторов не поддерживают следующие операции:

  • Поиск строки
  • Поиск выбранного типа в MSDN
  • Поиск выбранного типа в Bing

Однако, что поскольку разработка этих продуктов началась сравнительно недавно (февраль 2011) и еще идет полным ходом, функционал может существенно измениться. Поэтому ниже я привожу версии продуктов, между которыми я выбирал.

Далее я приведу скриншоты декомпиляторово и их краткое описание (отличие).


ILSpy билд 1.0.0.822

image

Очень похож на.NET Reflector. Умеет декомпилировать в C# и IL. Есть приятная функция, которой нет в рефлекторе и в других декомпиляторах – при декомпиляции кода показывает комментарии, что очень удобно.

Единственный из продуктов, который позволяет пометить сразу несколько сборок для удаления.

Telerik JustDecompile Beta билд 2011.1.516.2

image

Минусы начинаются со скачивания инсталлятора – при скачивании требует регистрации. У меня регистрация была, но в противном случае я бы его не стал скачивать.

Интересное совпадение, пока я писал эту статью JustDecompile показал мне уведомление, что есть обновленние, но что бы его скачать надо было опять вводить регистрационные данные. Лень мне стало их искать и обновление не стал скачивать.
Переборщили они с этим.

Немного не типичный интерфейс пользователя из-за чего создается впечатление что у программы Из рассматриваемых продуктов единственный, который на текущий момент умеет декомпилировать в C# и Visual Basic .NET.

Функция Analyze здесь называется Find Usages. Есть проблемы с поиском типов. Почему-то не всегда находит типы, так же не всегда при поиске типов фокус ввода в поле ввода. Мелочь, а неприятно.

JetBrains dotPeek билд 1.0.0.1219

Наиболее глючный и в то же время наиболее функциональный продукт. Регулярно (но не так часто чтобы надоесть) показывает диалог с просьбой отправить детали ошибки. Несколько раз сталкивался с таким багом. Открываю, например, исходники StringBuilder, затем выбираю интерфейс, который он реализует и исходный текст StringBuilder’а пропадает и больше не появляется. Ниже наглядная демонстрация бага.

image

Из существенных ограничений – умеет только декомпилировать в C#.

Для тех, кто пользуется решарпером интерфейс и горячие клавиши будут знакомы. Жаль, но не работает как в решарпере поиск элемента по заглавным буквам. Отличается и немного терминология. Т.е. нет команды Analyze, но есть Find Usages и Find Usages Advanced.

Нет панели инструментов с кнопками навигации (как-то привык я к нему в рефлекторе), чтобы перемещаться по коду вперед-назад надо выбирать пункта Navigate главного меню, что откровенно говоря не удобно. К счастью для этих команд горячие клавиши такие же как и в студии по дефолту.

Автоматически не выделяется текущий тип в дереве (но есть специальная команда ;)).

Как видно из скриншота каждый тип открывается в новой вкладке. Вкладки можно перемещать и прикреплять аналогично тому как это делается в студии.

Из интересных новшеств подметил, что dotPeek умеет подгружать с сайта Майросовт реальный исходный код (как это делает студия), но у меня почему-то это не сработало (возможно, тоже какой-то дефект).

Выводы

Меньше всех понравился JustDecompile. Оставлю только на случай если понадобится декомпиляция в Visual Basic .NET. Между ILSpy и dotPeek окончательный выбор я так пока не сделал. Я хоть и пользусь решарпером и нравится мне продвинутая функциональнось dotPeek, но как-то в большинстве случаев ILSpy пользоваться удобней. Возможно, сказывается привычка к .NET Reflector, а ILSpy больше всего на него похож.

Комментарии

Nikolay Osinin написал(а)…
Хороший обзор.
При всех недостатках описанных приложений они лучше чем ildasm.

PS. Не хочу занудствовать, но все же декомпилятор от JetBrains называется «dotPeek». :)
Андрей Бороздин написал(а)…
Спасибо, Коля, поправил.
Daniil Bystrukhin написал(а)…
.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
---------------------------
nd написал(а)…
Здравствуйте. А как с вами связаться? Не нашел никаких контактов. Скажите, пожалуйста, можно ли в каком нибудь декомпиляторе исправить код и тупо "Сохранить"? :) Или нужно обязательно ставить студию и в ней пересобирать? Надо кое что перевести) Распаковал рефлектором, вижу, что надо исправить, а редактора тут вроде как нет)
Андрей Бороздин написал(а)…
Нет, такой функции я не знаю. Более того если сборка подписана то еще потребуется и strong name key. что-то похожее можно проверуть с помощью ildasm и ilasm, но я бы не сказал, что это тривиальная задача :)
Savichev Alexander написал(а)…
https://code.google.com/p/simple-assembly-explorer/
И через опкоды править
Savichev Alexander написал(а)…
А вот собсно и описание оных
http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes_fields.aspx
Unknown написал(а)…
Будем вам очень благодарны, если оставите свои замечания об ошибках dotPeek в баг-треккере JetBrains http://youtrack.jetbrains.com/issues/DOTP Спасибо!

Популярные сообщения из этого блога

Команды docker save/load, docker export/import – в чем отличие, как и когда ими пользоваться

Как узнать, кто заблокировал файл или папку

Эрик Гамма переходит на работу в Майкрософт