Альтернативи з рефлектором з відкритим кодом? [зачинено]


419

Просто запитати, чи хтось знає про це альтернативу з рефлектором RedGate з відкритим кодом ? Мені цікаво перевірити, як насправді працює інструмент, подібний до Reflector.

Зверніть увагу, якщо ви знаєте безкоштовне, але ні відкриту альтернативу Reflector, ви можете відповісти на таке пов'язане питання:

Резюме - оновлено 11 травня 2011 року

Швидке зведення різноманітних проектів та інструментів з відкритим кодом, які були запропоновані:

  1. Загальна інфраструктура компілятора (ІСН)
  2. Моно Сесіль
  3. ILSpy
  4. dnSpy (вилка ILSpy, проект видається активнішим, ніж оригінал)
  5. Редактор Dotnet IL (DILE)
  6. IL.View
  7. Монофлектор ( більше не активний з квітня 2011 року)

Наступні ресурси також можуть представляти інтерес:

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

2
FYI, тепер є версія v6, яка буде безкоштовною нескінченно
theop

можливий дублікат чогось кращого .NET Reflector?
Мат

2
@Matt, якщо ви перевіряєте дати, це питання було задано до чогось кращого .NET Reflector? питання. Крім того, це питання спеціально вимагає альтернатив із відкритим кодом.
MagicAndi

Відповіді:


31

Я знаю 2 варіанти.

  • ТПП
  • Моно Сесіль

Ці не дадуть вам C # хоч.


Леппі, дякую. Я приймаю це як відповідь, хоча це був важкий вибір між вашою відповіддю та Джейсоном Хейлі.
MagicAndi

CCI не має інтерфейсу GUI (про що я знаю). Але в поточному джерелі в codeplex є досить простий API для перетворення декомпільованого AST в C #, fyi.
justin.m.chase

2
Mono.Cecil - це просто бібліотека, правда?
Роберт Джеппесен

175

Оновлено 13 грудня 2011 року

Доступні такі інструменти з відкритим кодом:


1
Я використовував dile кілька років тому - це чудовий розбирач ТА налагоджувач - я дуже рекомендував його ще тоді, коли я ним користувався. Я не використовував його деякий час, хоча.
Джейсон Хейлі

8
Поточна версія ILSpy (ILSpy v1.0.0.440, 20010228) працює так, як я очікував. Я можу переглядати методи, властивості та навіть вихідний код для C # lib без файлу PDB.
mathijsuitmegen

6
Щойно почав використовувати ILSpy. Дуже задоволений цим поки що. Ідеальний замінник. Дякую SharpDevelop!
codemonkey

1
Щойно натрапивши на цей інструмент, дуже радий побачити заміну штапеля в поясі інструментів розробника .NET. Деякі декомпіляції є дещо дивними (конкатенація рядків виявляється так, як це побачило б ІЛ, але це не обов'язково, як написано код - не погано), але в цілому чудовий інструмент!
CodeMonkey1313

5
Я просто спробував ILSpy, і він чудово працює! Він навіть реконструює лямбда-вирази та методи ітератора ("віддача") ... ух! Я перебуваю під враженням!
Qwertie

38

Ще однією заміною буде dotPeek . JetBrains оголосив про це як безкоштовний інструмент. Ймовірно, він буде мати більше функцій, якщо використовувати його Resharper, але навіть коли він використовується один, він працює дуже добре.

Досвід користувачів більше схожий на MSVS, ніж окремий розбирач. Мені подобається читання коду більше, ніж у Reflector. Навігація Ctrl + T теж підходить мені. Просто синхронізація дерева з кодовою панеллю може бути кращою.

Загалом, він все ще знаходиться в стадії розробки, але вже дуже добре використовується.


2
Прекрасний інструмент, але не з відкритим кодом. Це безкоштовно, однак це може означати, що він краде прожектор у будь-якому еквіваленті відкритих джерел.
Дрю Ноакс

Фердинанда, -1 для інструменту із закритим джерелом. Спробуйте додати це до одного із пов’язаних питань для Reflector.
MagicAndi

3
Я залишаю тут свою відповідь, щоб зробити інформацію більш повною. Цей потік найпростіше знайти в Google, а також список інших інструментів тут є найповнішим. (Не всі вони є OSS btw.)
Фердинанд Прантл

Фердинанд, я постійно прихиляв усі відповіді, які дають рішення із закритим джерелом, неодноразово оновлював текст запитання, щоб вказати, що мене цікавлять лише ОС, і переконався, що всі рішення у резюме питання є відкритим кодом. У цьому потоці запитань є лише одне інше рішення із закритим джерелом, яке я також заявив. Це питання було задано перед рішенням Redgate про стягнення плати на початку цього року і конкретно просить альтернативи з відкритим кодом. Що ще мені потрібно зробити?
MagicAndi

9
@MagicAndi Перестаньте скаржитися - це початок. Я знайшов цю тему від Google, шукаючи безкоштовну альтернативу. Мені було б менше байдуже, відкритий він чи ні. @Ferdinand дякує за посилання dotPeek, виглядає багатообіцяюче.
Вінстон Сміт

15

Сьогодні Telerik випустив бета-версію власного інструменту декомпіляції - JustDecompile . Закрите джерело, але безкоштовно і виглядає перспективно.


Рей, вибач, але щоб відповідати підходу до відповіді GrayWolf, мені доведеться спростувати цю відповідь. Це питання спеціально для альтернатив з відкритим кодом. Співтовариство .NET дозволило собі потрапити в цей безлад, спираючись на рішення із закритим джерелом; ми повинні уникати цього в майбутньому, незалежно від того, хто надає інструмент. -1
MagicAndi

Рей, виявляється, моя пропозиція Каліро також є утилітою із закритим джерелом. Будь ласка, не соромтесь відповісти на голосування - я це заслуговую! На жаль, ви не можете голосувати за власні відповіді ні вгору, ні вниз.
MagicAndi

1
@MagicAndi - Вашу відповідь було б простіше видалити, ніж спростувати її. Якщо ви не відчуваєте, що це додає будь-якої цінності, тоді ви маєте сили змусити "піти".
jpierson

1
Не видаляйте та не знімайте жодної відповіді. Інші питання щодо безкоштовних альтернатив закриваються модераторами як "дублікати" цього питання! тому інформація варта бути тут.
Олексій

JustDecompile - це ганебно баггі-додаток, який постійно виходить з ладу і показує безліч винятків, де має бути код. Крім того, це дуже повільно. .NET Reflector набагато кращий за це лайно!
Elmue

12

ILSpy чудово працює!

Наскільки я можу сказати, він робить все, що зробив Reflector, і теж виглядає так само.


10

Насправді я впевнений, що Reflector вважається розбиральником з деякими функціями декомпілятора. Діссемблер, оскільки він зчитує байти з файлу збірки та перетворює його на мову складання (ILasm у цьому випадку). Функціонал Decompiler, який він надає, аналізує ІЛ на добре відомі зразки (наприклад, вирази та висловлювання), які потім переводяться на мови вищого рівня, такі як C #, VB.Net і т.д. Додаток api для Reflector дозволяє написати власний перекладач мови, якщо Ви хочете ... однак магія того, як він розбирає ІЛ на дерева виразів, є чітко захищеним секретом.

Я б рекомендував переглянути будь-яку з трьох згаданих вище речей, якщо ви хочете зрозуміти, як працюють IL-розбирачі: Dile, CCI та Mono - це все гарні джерела для цього.

Я також настійно рекомендую отримати специфікацію Ecma 335 та книгу Сержа Лідіна.


це посилання здається вниз
Ліра

Так, вибачте, що я знищив цей сайт минулого року і не замінив його.
Джейсон Хейлі

8

Основна причина, за якою я використовував Reflector (і, я думаю, головна причина, по якій його використовували більшість людей), був його декомпілятор: він може перевести ІЛ методу назад у вихідний код.

За цим рахунком, Монофлектор - це проект, який слід спостерігати. Він використовує Cecil, який робить відображення, і Cecil.Decompiler, який робить декомпіляцію. Але Monoflector накладає інтерфейс користувача на обидві бібліотеки, що має дати вам дуже гарне уявлення про використання API.

Монофлектор також є гідною альтернативою відбивача прямо. Це дозволяє переглядати типи та декомпілювати методи, що становить 99% того, що люди використовували Reflector. По краях дуже грубо, але я думаю, що це швидко зміниться.


5

Ну, Reflector сам по собі .NET збірка, так що ви можете відкрити Reflector.exe в Reflector, щоб перевірити, як він побудований.


14
Ні, ти не можеш. Рефлектор затуманений.
Джефф Йейтс

14
Ви не можете відкрити Reflector в Reflector? Я щойно це зробив - обфускація просто шкодить читабельності ІЛ, оскільки ідентифікатори та назви типів змішані, але це не означає, що ти не можеш її розібрати.
Ендрю Заєць

13
Андрій - коли в норі, перестань копати ...
MagicAndi

2
Хм ... у мене версія 5.1.6.0, і я можу бачити джерело просто чудово - лише імена ідентифікаторів приховані. Не ідеально так, але я зараз дивлюсь на джерело відбивача C # прямо зараз. :)
Ендрю Заєць

7
@Andrew Hare: Якщо ви спробуєте подивитися на реалізацію методу через рефлектор у відбивачі, ви побачите "Це затуманено", і це не відобразиться, так ні, ви не можете використовувати Reflector. Крім того, бути педантичним щодо того, чого хоче ОП з ОП, є програшною битвою.
Джефф Йейтс

3

Зараз я працюю над розбиральником / декомпілятором з відкритим кодом, який називається Assembly Analyzer. Він генерує вихідний код для методів, відображає метадані збирання та ресурси та дозволяє пройти залежність.

Проект розміщений на CodePlex => http://asmanalyzer.codeplex.com/


1

Інструмент Reflector використовує Reflection.   - мабуть, це не правильно.

Ви попросили дві речі - код, який показує, що робить рефлектор, а також альтернативу відбивача.

Ось приклад, значно спрощений з того, що робить Reflector, але він показує техніку відображення: TypeView.cs

У мене немає пропозиції щодо заміни рефлектора з відкритим кодом.


Ага, якщо ви з "Відбиттям" посилаєтесь на "System.Reflection" .NET Framework, я б дуже сумнівався в цьому.
Крістіан.К

3
@ Christian.K: Ні, Reflector не використовується System.Reflectionв рамках, Редер заявив так само дуже рано через проблеми з завантаженням і розвантаженням збірок.
casperOne

@casperOne, я не знаю, як саме .NET Reflector працює внутрішньо, але System.Reflectionпростір імен було розширено з перших днів .NET Reflector. Тепер він підтримує завантаження та вивантаження збірок у контексті, що відображається лише: stackoverflow.com/questions/225330/…
Дрю Ноакс

1
@Drew Noakes: Це правда, але Редер ніколи не заявив (наскільки мені відомо), що після цієї зміни він повернувся до Reflection.
casperOne
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.