Альтернативы рефлектору с открытым исходным кодом?
Просто спросить, знает ли кто-нибудь альтернативу RedGate's Reflector с открытым исходным кодом? Мне интересно узнать, как на самом деле работает инструмент, похожий на Reflector.
Обратите внимание: если вам известна бесплатная, но не открытая альтернатива Reflector, вы можете ответить на следующий связанный вопрос:
Резюме - Обновлено 11 мая 2011
Краткий обзор различных проектов и инструментов с открытым исходным кодом, которые были предложены:
- Общая инфраструктура компилятора (CCI)
- Моно Сесил
- ILSpy
- dnSpy (форк ILSpy, проект выглядит более активным, чем оригинальный)
- Dotnet IL Editor (DILE)
- IL.View
- Монофлектор ( больше не активен с апреля 2011 года)
Также могут представлять интерес следующие ресурсы:
- TypeView.cs
- Заметки Джейсона Хейли о разборке.NET
- Недавнее сообщение в блоге adrianbanks котором кратко изложены некоторые альтернативы Reflector, включая несколько вариантов, не упомянутых ниже.
- Подробный пост Марка Лихтенберга, в котором сравниваются некоторые альтернативы с открытым исходным кодом (DILE, ILSpy и Mono Cecil с использованием MonoDevelop) для Reflector.
10 ответов
Обновлено 13 декабря 2011
Доступны следующие инструменты с открытым исходным кодом:
- ILSpy от команды SharpDevelop. Благодаря твитту Скотта Хансельмана, освещающему инструмент.
- Dotnet IL Editor (дизассемблер)
- IL.View - альтернатива.NET Reflector, написанная на Silverlight 4 как приложение Silverlight для браузера. Смотрите этот блог для деталей.
Другой заменой будет dotPeek. JetBrains объявил это как бесплатный инструмент. Вероятно, он будет иметь больше возможностей при использовании с их Resharper, но даже если он используется отдельно, он работает очень хорошо.
Пользовательский опыт больше похож на MSVS, чем на отдельный дизассемблер. Мне нравится читать код больше, чем в Reflector. Навигация по Ctrl+T мне тоже подходит. Синхронизация дерева с панелью кода может быть лучше.
В общем, он все еще находится в разработке, но уже очень пригоден для использования.
Сегодня Telerik выпустил бета-версию собственного инструмента декомпиляции JustDecompile. Закрытый источник, но бесплатный и выглядит многообещающе.
ILSpy прекрасно работает!
Насколько я могу судить, он делает все то же, что и Reflector, и выглядит так же.
На самом деле, я уверен, что Reflector считается дизассемблером с некоторыми функциями декомпилятора. Дизассемблер, потому что он считывает байты из файла сборки и преобразует его в язык ассемблера (в данном случае ILasm). Функциональность декомпилятора, которую он обеспечивает, разбирая IL в хорошо известные шаблоны (например, выражения и операторы), которые затем переводятся на языки более высокого уровня, такие как C#, VB.Net и т. Д. Apin addi для Reflector позволяет вам писать свой собственный переводчик языка, если Вы хотите... однако магия того, как он разбирает IL на деревья выражений, является тщательно охраняемым секретом.
Я бы порекомендовал взглянуть на любую из трех вещей, упомянутых выше, если вы хотите понять, как работают дизассемблеры IL: Dile, CCI и Mono - хорошие источники для этого материала.
Я также настоятельно рекомендую получить спецификацию Ecma 335 и книгу Сержа Лидина.
Основная причина, по которой я использовал Reflector (и, как мне кажется, основная причина, по которой его использовали большинство людей), заключалась в его декомпиляторе: он может переводить IL метода обратно в исходный код.
На этот счет Monoflector будет проект для просмотра. Он использует Cecil, который выполняет отражение, и Cecil.Decompiler, который выполняет декомпиляцию. Но Monoflector накладывает пользовательский интерфейс поверх обеих библиотек, что должно дать вам очень хорошее представление о том, как использовать API.
Monoflector также является достойной альтернативой Reflector. Он позволяет вам просматривать типы и декомпилировать методы, что составляет 99% от того, для чего люди использовали Reflector. Это очень грубо по краям, но я думаю, что это быстро изменится.
Что ж, Reflector сам по себе является сборкой.NET, поэтому вы можете открыть Reflector.exe в Reflector, чтобы проверить, как он построен.
В настоящее время я работаю над дизассемблером / декомпилятором с открытым исходным кодом, который называется Assembly Analyzer. Он генерирует исходный код для методов, отображает метаданные сборки и ресурсы, а также позволяет просматривать зависимости.
Проект размещен на CodePlex => http://asmanalyzer.codeplex.com/
Инструмент "Отражатель" использует "Отражение". - видимо это не правильно.
Вы просили две вещи - код, который показывает, что делает рефлектор, а также альтернативу рефлектору.
Вот пример, значительно упрощенный по сравнению с тем, что делает Reflector, но он показывает технику отражения: TypeView.cs
У меня нет предложений по замене рефлектора с открытым исходным кодом.