Alternatywy Open Source dla reflektora? [Zamknięte]


419

Wystarczy zapytać, czy ktoś wie o otwartej alternatywie dla RedGate's Reflector ? Chciałbym sprawdzić, jak działa narzędzie podobne do Reflector.

Uwaga: jeśli znasz bezpłatną, ale nie open source alternatywę dla Reflector, możesz odpowiedzieć na następujące pokrewne pytanie:

Podsumowanie - zaktualizowano 11 maja 2011 r

Szybkie podsumowanie różnych zaproponowanych projektów i narzędzi open source:

  1. Common Compiler Infrastructure (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy (rozwidlenie ILSpy, projekt wydaje się bardziej aktywny niż oryginalny)
  5. Dotnet IL Editor (DILE)
  6. IL.View
  7. Monoflector ( nieaktywny od kwietnia 2011 r.)

Interesujące mogą być również następujące zasoby:


2
Do Twojej wiadomości, jest teraz wersja v6, która będzie bezpłatna w nieskończoność
— thecoop


2
@Matt, jeśli sprawdzisz daty, to pytanie zostało zadane przed czymś lepszym niż .NET Reflector? pytanie. Ponadto pytanie to dotyczy w szczególności alternatywnych rozwiązań typu open source.
— MagicAndi

Odpowiedzi:


31

2 znane mi opcje.

  • CCI
  • Mono Cecil

Nie dadzą ci jednak C #.


Leppie, dzięki. Przyjmuję to jako odpowiedź, chociaż był to trudny wybór między twoją odpowiedzią a Jasonem Haleyem.
— MagicAndi,

CCI nie ma interfejsu GUI (o czym wiem). Ale w obecnym źródle w codeplex istnieje dość prosty API do konwersji zdekompilowanej AST do C #, fyi.
— justin.m.chase

2
Mono.Cecil to tylko biblioteka, prawda?
— Robert Jeppesen

175

Zaktualizowano 13 grudnia 2011 r

Dostępne są następujące narzędzia typu open source:

  • ILSpy z zespołu SharpDevelop. Dzięki tweetowi Scotta Hanselmana podkreślającemu narzędzie.
  • Dotnet IL Editor (deasembler)
  • IL.View - alternatywa .NET Reflector napisana w Silverlight 4 jako aplikacja Silverlight poza przeglądarką. Zobacz ten post na blogu, aby uzyskać szczegółowe informacje.

1
Użyłem dile kilka lat temu - jest to świetny deasembler ORAZ debugger - bardzo go polecam, kiedy go używałem. Jednak nie używałem go przez jakiś czas.
— Jason Haley,

8
Obecna wersja ILSpy (ILSpy v1.0.0.440, 20010228) działa tak, jak się spodziewałem. Mogę przeglądać metody, właściwości, a nawet kod źródłowy dla biblioteki C # bez pliku PDB.
— mathijsuitmegen

6
Właśnie zacząłem używać ILSpy. Jak na razie bardzo zadowolony. Idealny zamiennik. Dziękujemy SharpDevelop!
— klucz kodowy

1
Właśnie natknąłem się na to narzędzie, bardzo szczęśliwy, widząc zamiennik zszywki w pasku narzędzi programisty .NET. Niektóre dekompilacje są trochę dziwne (konkatenacja ciągów pokazuje się tak, jak IL to zobaczyłaby, ale niekoniecznie tak, jak napisano kod - nie jest to zła rzecz), ale ogólnie, świetne narzędzie!
— CodeMonkey1313

5
Właśnie wypróbowałem ILSpy i działa świetnie! Odtwarza nawet wyrażenia lambda i metody iteratora („zwrot z zysku”) ... wow! Jestem pod wrażeniem!
— Qwertie

38

Kolejnym zamiennikiem byłoby dotPeek . JetBrains ogłosił, że jest to bezpłatne narzędzie. Prawdopodobnie będzie miał więcej funkcji, gdy zostanie użyty z Resharperem, ale nawet gdy jest używany sam, działa bardzo dobrze.

Doświadczenie użytkownika bardziej przypomina MSVS niż samodzielny deasembler. Lubię czytać kod bardziej niż w Reflector. Nawigacja Ctrl + T bardziej mi odpowiada. Synchronizacja drzewa z panelem kodu może być lepsza.

Podsumowując, wciąż jest w fazie rozwoju, ale już bardzo dobrze nadaje się do użytku.


2
Świetne narzędzie, ale nie open source. Jest jednak darmowy, co może oznaczać, że kradnie światło reflektorów z dowolnego odpowiednika typu open source.
— Drew Noakes

Ferdinand, -1 dla narzędzia o zamkniętym źródle. Powinieneś spróbować dodać to do jednego z powiązanych pytań do Reflector.
— MagicAndi

3
Zostawiam swoją odpowiedź tutaj, aby informacje były bardziej kompletne. Wątek ten jest najłatwiejszy do znalezienia przez Google, a także lista innych narzędzi tutaj jest najbardziej kompletna. (Nie wszystkie z nich są OSS btw.)
— Ferdinand Prantl

Ferdinand, konsekwentnie zanegowałem wszystkie odpowiedzi, które dają rozwiązania o zamkniętym źródle, wielokrotnie aktualizowałem tekst pytania, aby określić, że interesuje mnie tylko OSS, i upewniłem się, że wszystkie rozwiązania w podsumowaniu pytań są otwarte. Jest tylko jedno rozwiązanie z zamkniętym źródłem w tym wątku pytania, o którym również wspomniałem. To pytanie zostało zadane przed decyzją Redgate o ponownym obciążeniu na początku tego roku i dotyczy w szczególności alternatywnych rozwiązań typu open source. Co jeszcze muszę zrobić?
— MagicAndi

9
@MagicAndi Przestań narzekać byłoby początkiem. Znalazłem ten wątek od Google, szukając darmowej alternatywy. Nie obchodzi mnie to, czy jest to oprogramowanie typu open source, czy nie. @Ferdinand dzięki za link dotPeek, wygląda obiecująco.
— Winston Smith

15

Telerik wydał dzisiaj wersję beta własnego narzędzia do dekompilacji, JustDecompile . Zamknięte źródło, ale bezpłatne i wygląda obiecująco.


Ray, przepraszam, ale żeby być spójnym z podejściem do odpowiedzi GrayWolf, będę musiał głosować za tą odpowiedzią. To pytanie dotyczy w szczególności opcji Open Source. Społeczność .NET pozwoliła sobie wejść w ten bałagan, polegając na rozwiązaniu o zamkniętym źródle; powinniśmy tego unikać w przyszłości, niezależnie od tego, kto udostępnia to narzędzie. -1
— MagicAndi

Ray, okazuje się, że moja sugestia Kaliro to także narzędzie o zamkniętym źródle. Proszę odwzajemnić opinię - zasługuję na to! Niestety nie możesz głosować na własne odpowiedzi, ani w górę, ani w dół.
— MagicAndi

1
@MagicAndi - Usunięcie odpowiedzi byłoby łatwiejsze niż głosowanie za nią. Jeśli nie uważasz, że to wnosi jakąkolwiek wartość, masz moc sprawienia, że ​​„zniknie”.
— jpierson

1
Nie usuwaj / nie głosuj tej odpowiedzi. Inne pytania SO dotyczące bezpłatnych alternatyw są zamykane przez moderatorów jako „duplikaty” tego pytania! więc informacje powinny być tutaj.
— Alex

JustDecompile to wstydliwie błędna aplikacja, która ulega awarii przez cały czas i pokazuje wiele wyjątków, gdzie powinien znajdować się kod. Poza tym jest bardzo powolny. .NET Reflector jest DUŻO lepszy niż to badziewie!
— Elmue

12

ILSpy działa świetnie!

O ile mogę powiedzieć, robi wszystko, co zrobił Reflektor i wygląda tak samo.


10

Właściwie jestem całkiem pewien, że Reflector jest uważany za deasembler z niektórymi funkcjami dekompilatora. Deasembler, ponieważ odczytuje bajty z pliku zestawu i konwertuje go na język asemblera (w tym przypadku ILasm). Funkcja dekompilatora, którą zapewnia, analizując IL w dobrze znane wzorce (takie jak wyrażenia i instrukcje), które następnie są tłumaczone na języki wyższego poziomu, takie jak C #, VB.Net itp. Dodatkowy interfejs dla Reflectora pozwala napisać własny tłumacz języka, jeśli chcesz ... jednak magia tego, jak analizuje IL w drzewa ekspresji, jest ściśle strzeżoną tajemnicą.

Polecam przyjrzeć się którejkolwiek z trzech wyżej wymienionych rzeczy, jeśli chcesz zrozumieć, jak działają deasemblery IL: Dile, CCI i Mono są dobrym źródłem dla tych rzeczy.

Bardzo polecam także zakup specyfikacji Ecma 335 i książki Serge'a Lidina.


ten link wydaje się nie działać
— Lyra

Tak, przepraszam, że usunąłem tę stronę w zeszłym roku i jej nie zastąpiłem.
— Jason Haley

8

Głównym powodem, dla którego użyłem Reflectora (i myślę, że głównym powodem, dla którego większość ludzi go używało) był jego dekompilator: może on przetłumaczyć IL metody z powrotem na kod źródłowy.

Pod tym względem Monoflector byłby projektem do obejrzenia. Używa Cecil, który wykonuje odbicie, i Cecil.Decompiler, który dokonuje dekompilacji. Ale Monoflector nakłada interfejs na obie biblioteki, co powinno dać ci bardzo dobry pomysł na użycie API.

Monoflector jest również przyzwoitą alternatywą dla reflektora. Pozwala przeglądać typy i dekompilować metody, co stanowi 99% tego, do czego ludzie używali Reflectora. Na brzegach jest bardzo szorstko, ale myślę, że to się szybko zmieni.


5

Cóż, sam Reflector jest zestawem .NET, więc możesz otworzyć Reflector.exe w Reflector, aby sprawdzić, jak jest zbudowany.


14
Nie możesz. Odbłyśnik jest zaciemniony.
— Jeff Yates,

14
Nie możesz otworzyć Odbłyśnika w Odbłyśniku? Właśnie to zrobiłem - zaciemnianie po prostu szkodzi czytelności IL, ponieważ identyfikatory i nazwy typów są zniekształcone, ale to nie znaczy, że nie można go odinstalować.
— Andrew Hare,

13
Andrew - kiedy jesteś w dziurze, przestań kopać ...
— MagicAndi

2
Hmm ... Mam wersję 5.1.6.0 i dobrze widzę źródło - tylko nazwy identyfikatorów są zaciemnione. Nie idealnie tak, ale teraz patrzę na źródło C # Reflector. :)
— Andrew Hare,

7
@Andrew Hare: Jeśli spróbujesz spojrzeć na implementację metody przez odbłyśnik w odbłyśniku, zobaczysz „To jest zaciemnione” i nie pokaże tego, więc nie, nie możesz użyć Odbłyśnika. Poza tym bycie pedantycznym na temat tego, czego OP chce od OP, jest przegraną bitwą.
— Jeff Yates,

3

Obecnie pracuję nad dezasemblerem / dekompilatorem open source o nazwie Assembly Analyzer. Generuje kod źródłowy dla metod, wyświetla metadane asemblera i zasoby oraz pozwala przejść przez zależności.

Projekt jest hostowany na CodePlex => http://asmanalyzer.codeplex.com/


1

Narzędzie Odbłyśnik używa Odbicia.   - najwyraźniej to nie jest poprawne.

Poprosiłeś o dwie rzeczy - kod, który pokazuje, co robi reflektor, a także alternatywę dla reflektora.

Oto przykład, znacznie uproszczony w porównaniu z tym, co robi reflektor, ale pokazuje technikę odbicia: TypeView.cs

Nie mam propozycji wymiany reflektora na oprogramowanie typu open source.


Uhm, jeśli w „Reflection” odwołujesz się do „System.Reflection” frameworku .NET, bardzo bym w to wątpił.
— Christian.K,

3
@ Christian.K: Nie, Reflector nie korzysta System.Reflectionz frameworka, Roeder stwierdził bardzo wcześnie z powodu problemów z załadowaniem i rozładowaniem zestawu.
— casperOne

@casperOne, nie wiem dokładnie, jak działa .NET Reflector wewnętrznie, ale System.Reflectionprzestrzeń nazw została rozszerzona od pierwszych dni .NET Reflector. Obsługuje teraz ładowanie i rozładowywanie zestawów w kontekście tylko do odbicia: stackoverflow.com/questions/225330/...
— Drew Noakes

1
@Drew Noakes: To prawda, ale Roeder nigdy nie powiedział (o ile wiem), że wrócił do Reflection po wprowadzeniu tej zmiany.
— casperOne
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.