Альтернативы рефлектору с открытым исходным кодом?

Просто спросить, знает ли кто-нибудь альтернативу RedGate's Reflector с открытым исходным кодом? Мне интересно узнать, как на самом деле работает инструмент, похожий на Reflector.

Обратите внимание: если вам известна бесплатная, но не открытая альтернатива Reflector, вы можете ответить на следующий связанный вопрос:

Резюме - Обновлено 11 мая 2011

Краткий обзор различных проектов и инструментов с открытым исходным кодом, которые были предложены:

  1. Общая инфраструктура компилятора (CCI)
  2. Моно Сесил
  3. ILSpy
  4. dnSpy (форк ILSpy, проект выглядит более активным, чем оригинальный)
  5. Dotnet IL Editor (DILE)
  6. IL.View
  7. Монофлектор ( больше не активен с апреля 2011 года)

Также могут представлять интерес следующие ресурсы:

  • TypeView.cs
  • Заметки Джейсона Хейли о разборке.NET
  • Недавнее сообщение в блоге adrianbanks котором кратко изложены некоторые альтернативы Reflector, включая несколько вариантов, не упомянутых ниже.
  • Подробный пост Марка Лихтенберга, в котором сравниваются некоторые альтернативы с открытым исходным кодом (DILE, ILSpy и Mono Cecil с использованием MonoDevelop) для Reflector.

10 ответов

Решение

2 варианта, которые я знаю.

Это не даст вам C#, хотя.

Обновлено 13 декабря 2011

Доступны следующие инструменты с открытым исходным кодом:

Другой заменой будет 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

У меня нет предложений по замене рефлектора с открытым исходным кодом.

Другие вопросы по тегам