Ответ 1
2 варианта, о которых я знаю.
- CCI
- Моно Сесил
Это не даст вам С#.
Просто спросите, знает ли кто-нибудь о альтернативе с открытым исходным кодом для RedGate Reflector? Мне интересно узнать, как работает инструмент, похожий на Reflector.
Обратите внимание: если вы знаете бесплатную, но не альтернативу Open Source для Reflector, вы можете ответить на следующий связанный с этим вопрос:
Резюме - Обновлено 11 мая 2011 г.
Быстрый обзор различных проектов и инструментов с открытым исходным кодом, которые были предложены:
Также могут быть интересны следующие ресурсы:
2 варианта, о которых я знаю.
Это не даст вам С#.
Обновлено 13 декабря 2011
Доступны следующие инструменты с открытым исходным кодом:
Другая замена - dotPeek. JetBrains объявила об этом как бесплатный инструмент. Вероятно, у него будет больше возможностей при использовании с Resharper, но даже при использовании в одиночку оно работает очень хорошо.
Пользовательский интерфейс больше похож на MSVS, чем на автономный дизассемблер. Мне нравится чтение кода больше, чем в Reflector. Ctrl + T подходит мне тоже лучше. Просто синхронизация дерева с областью кода может быть лучше.
В целом, он все еще находится в разработке, но очень хорошо используется уже.
Сегодня Telerik выпустила бету своего инструмента декомпиляции, JustDecompile. Закрытый источник, но бесплатный и выглядит многообещающим.
ILSpy отлично работает!
Насколько я могу судить, он делает все, что сделал Reflector, и выглядит так же.
На самом деле, я уверен, что Reflector считается дизассемблером с некоторыми функциями декомпилятора. Disassembler, потому что он считывает байты из файла сборки и преобразует его на язык ассемблера (в этом случае ILasm). Функцию Decompiler, которую он предоставляет, анализируя IL в хорошо известные шаблоны (например, выражения и утверждения), которые затем переводятся на языки более высокого уровня, такие как С#, VB.Net и т.д. Addin api for Reflector позволяет вам писать свой собственный переводчик языка, если вы хотите... однако волшебство того, как он анализирует IL в деревьях выражений, является тщательно охраняемым секретом.
Я бы порекомендовал посмотреть на любую из трех вещей, упомянутых выше, если вы хотите понять, как работают дисассемблеры IL: Dile, CCI и Mono - все это хорошие источники для этого материала.
Я также очень рекомендую получить экзему Ecma 335 и книгу Сергея Лидина.
Основная причина, по которой я использовал Reflector (и, я думаю, основную причину, по которой большинство людей использовали ее), был для своего декомпилятора: он может перевести метод IL обратно в исходный код.
В этом случае Monoflector будет проектом для просмотра. Он использует Cecil, который делает отражение, и Cecil.Decompiler, который выполняет декомпиляцию. Но Monoflector формирует пользовательский интерфейс поверх обеих библиотек, что должно дать вам очень хорошее представление о том, как использовать API.
Монофлектор также является достойной альтернативой рефлектору. Он позволяет просматривать типы и декомпилировать методы, которые составляют 99% того, для чего люди использовали Reflector. Это очень грубо по краям, но я думаю, что это изменится быстро.
Ну, Reflector сам является сборкой .NET, поэтому вы можете открыть Reflector.exe в Reflector, чтобы узнать, как он построен.
В настоящее время я работаю над дизассемблером/декомпилятором с открытым исходным кодом, называемым Assembly Analyzer. Он генерирует исходный код для методов, отображает метаданные и ресурсы сборки и позволяет вам просматривать зависимости.
Проект размещен на CodePlex = > http://asmanalyzer.codeplex.com/
Инструмент Reflector использует Reflection. - видимо, это неверно.
Вы попросили две вещи - код, который показывает, что делает отражатель, а также альтернатива рефлектору.
Вот пример, значительно упрощенный из того, что делает Reflector, но он показывает технику отражения: TypeView.cs
У меня нет предложения об замене рефлектора с открытым исходным кодом.