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:

MagicAndi
źródło
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
źródło
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.
MagicAndi
źródło
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.

Ferdinand Prantl
źródło
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.

rękawica ray
źródło
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.

Obrabować
źródło
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.

Jason Haley
źródło
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.

Joe White
źródło
5

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

Andrew Hare
źródło
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/

Codewhisperer84
źródło
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.

Cheeso
źródło
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