Open Source Alternativen zum Reflektor? [geschlossen]

419

Nur um zu fragen, ob jemand eine Open-Source- Alternative zu RedGates Reflector kennt ? Ich möchte herausfinden, wie ein Tool ähnlich wie Reflector tatsächlich funktioniert.

Hinweis: Wenn Sie eine kostenlose, aber nicht Open Source-Alternative zu Reflector kennen, können Sie die folgende verwandte Frage beantworten:

Zusammenfassung - Aktualisiert am 11. Mai 2011

Eine kurze Zusammenfassung der verschiedenen vorgeschlagenen Open Source-Projekte und -Tools:

  1. Common Compiler Infrastructure (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy (Gabelung von ILSpy, Projekt erscheint aktiver als das Original)
  5. Dotnet IL Editor (DILE)
  6. IL.View
  7. Monoflektor (seit April 2011 nicht mehr aktiv )

Die folgenden Ressourcen können ebenfalls von Interesse sein:

  • TypeView.cs
  • Jason Haleys Notizen zum Zerlegen von .NET
  • Der jüngste Blog-Beitrag der Adrian Bank fasst eine Reihe von Reflektor-Alternativen zusammen, darunter einige Optionen, die unten nicht erwähnt werden.
  • Mark Lichtenbergs ausführlicher Blog-Beitrag vergleicht einige der Open-Source-Alternativen (DILE, ILSpy und Mono Cecil mit MonoDevelop) mit Reflector.
MagicAndi
quelle
2
Zu Ihrer
Information
mögliches Duplikat von etwas Besserem als .NET Reflector?
Mat
2
@Matt, wenn Sie die Daten überprüfen, wurde diese Frage vor dem etwas Besseres als .NET Reflector gestellt? Frage. Diese Frage fragt auch speziell nach Open-Source-Alternativen.
MagicAndi

Antworten:

31

2 Optionen, die ich kenne.

  • CCI
  • Mono Cecil

Diese geben Ihnen jedoch kein C #.

Leppie
quelle
Leppie, danke. Ich akzeptiere dies als Antwort, obwohl es eine schwierige Wahl zwischen Ihrer Antwort und der von Jason Haley war.
MagicAndi
CCI hat kein GUI-Frontend (das mir bekannt ist). In der aktuellen Quelle in Codeplex gibt es jedoch eine ziemlich einfache API, um den dekompilierten AST in C # zu konvertieren.
justin.m.chase
2
Mono.Cecil ist nur eine Bibliothek, oder?
Robert Jeppesen
175

Aktualisiert am 13. Dezember 2011

Folgende Open Source-Tools stehen zur Verfügung:

  • ILSpy vom SharpDevelop-Team. Dank Scott Hanselmans Tweet , der das Tool hervorhebt.
  • Dotnet IL Editor (ein Disassembler)
  • IL.View - eine .NET Reflector-Alternative, die in Silverlight 4 als Silverlight-Anwendung außerhalb des Browsers geschrieben wurde. Weitere Informationen finden Sie in diesem Blogbeitrag .
MagicAndi
quelle
1
Ich habe Dile vor ein paar Jahren verwendet - es ist ein großartiger Disassembler UND Debugger - ich habe es sehr empfohlen, als ich es verwendet habe. Ich habe es eine Weile nicht benutzt.
Jason Haley
8
Die aktuelle Version von ILSpy (ILSpy v1.0.0.440, 20010228) funktioniert so, wie ich es erwartet hatte. Ich kann Methoden, Eigenschaften und sogar Quellcode für eine C # -Bibliothek ohne die PDB-Datei durchsuchen.
Mathijsuitmegen
6
Ich habe gerade angefangen, ILSpy zu verwenden. Bis jetzt sehr zufrieden damit. Perfekter Ersatz. Vielen Dank, dass Sie SharpDevelop!
Codemonkey
1
Ich bin gerade auf dieses Tool gestoßen und freue mich sehr, einen Ersatz für eine Heftklammer im Werkzeuggürtel des .NET-Entwicklers zu sehen. Einige der Dekompilierungen sind etwas seltsam (die Verkettung von Zeichenfolgen wird so angezeigt, wie IL es sehen würde, aber nicht unbedingt so, wie der Code geschrieben wurde - keine schlechte Sache), aber insgesamt ein großartiges Tool!
CodeMonkey1313
5
Ich habe gerade ILSpy ausprobiert und es funktioniert großartig! Es rekonstruiert sogar Lambda-Ausdrücke und Iterator-Methoden ("Yield Return") ... wow! Ich bin beeindruckt!
Qwertie
38

Ein weiterer Ersatz wäre dotPeek . JetBrains kündigte es als kostenloses Tool an. Es wird wahrscheinlich mehr Funktionen haben, wenn es mit ihrem Resharper verwendet wird aber selbst wenn es alleine verwendet wird, funktioniert es sehr gut.

Die Benutzererfahrung ähnelt eher MSVS als einem eigenständigen Disassembler. Ich lese Code lieber als in Reflector. Strg + T Navigation passt auch besser zu mir. Es könnte besser sein, den Baum nur mit dem Codebereich zu synchronisieren.

Alles in allem befindet es sich noch in der Entwicklung, ist aber bereits sehr gut verwendbar.

Ferdinand Prantl
quelle
2
Tolles Tool, aber kein Open Source. Es ist jedoch kostenlos, was bedeuten kann, dass es das Scheinwerferlicht von jedem OpenSource-Äquivalent stiehlt.
Drew Noakes
Ferdinand, -1 für ein Closed-Source-Tool. Sie sollten versuchen, dies zu einer der verknüpften Fragen für Reflector hinzuzufügen.
MagicAndi
3
Ich lasse meine Antwort hier, um die Informationen zu vervollständigen. Dieser Thread ist am einfachsten von Google zu finden und auch die Liste der anderen Tools hier ist am vollständigsten. (Nicht alle von ihnen sind übrigens OSS.)
Ferdinand Prantl
Ferdinand, ich habe alle Antworten, die Closed-Source-Lösungen liefern, konsequent herabgestuft, den Fragentext wiederholt aktualisiert, um anzugeben, dass ich nur an OSS interessiert bin, und sichergestellt, dass alle Lösungen in der Fragezusammenfassung Open Source sind. In diesem Fragethread gibt es nur eine andere Closed-Source-Lösung, die ich ebenfalls abgelehnt habe. Diese Frage wurde vor der Entscheidung von Redgate gestellt, Anfang dieses Jahres eine Rückbelastung vorzunehmen, und fragt speziell nach Open-Source-Alternativen. Was muss ich noch tun?
MagicAndi
9
@MagicAndi Hör auf dich zu beschweren wäre ein Anfang. Ich habe diesen Thread von Google gefunden, als ich nach einer kostenlosen Alternative gesucht habe. Es ist mir egal, ob es Open Source ist oder nicht. @Ferdinand danke für den dotPeek Link, sieht vielversprechend aus.
Winston Smith
15

Telerik hat heute eine Beta seines eigenen Dekompilierungs-Tools JustDecompile veröffentlicht . Geschlossene Quelle, aber kostenlos und sieht vielversprechend aus.

Ray Glover
quelle
Ray, entschuldige mich, aber um mit der Herangehensweise an die GrayWolf-Antwort übereinzustimmen, muss ich diese Antwort ablehnen. Diese Frage bezieht sich speziell auf Open Source-Alternativen. Die .NET-Community erlaubte sich, in dieses Chaos zu geraten, indem sie sich auf eine Closed-Source-Lösung stützte. Wir sollten dies in Zukunft vermeiden, unabhängig davon, wer das Tool bereitstellt. -1
MagicAndi
Ray, mein Kaliro-Vorschlag ist auch ein Closed-Source-Dienstprogramm. Bitte zögern Sie nicht, die Ablehnung zu erwidern - ich habe es verdient! Leider können Sie weder nach oben noch nach unten über Ihre eigenen Antworten abstimmen.
MagicAndi
1
@MagicAndi - Es wäre einfacher, Ihre Antwort zu löschen, als sie abzustimmen. Wenn Sie nicht das Gefühl haben, dass es einen Mehrwert bringt, haben Sie die Macht, "weg zu sein".
Jpierson
1
Entfernen Sie diese Antwort nicht / stimmen Sie sie nicht ab. Andere SO-Fragen zu kostenlosen Alternativen werden von Moderatoren als "Duplikate" dieser Frage geschlossen! Die Informationen sind es also wert, hier zu sein.
Alex
JustDecompile ist eine beschämend fehlerhafte Anwendung, die ständig abstürzt und viele Ausnahmen zeigt, wo Code sein sollte. Abgesehen davon ist es sehr langsam. .NET Reflector ist VIEL besser als dieser Mist!
Elmue
12

ILSpy funktioniert !

Soweit ich das beurteilen kann, macht es alles, was Reflector getan hat, und sieht auch gleich aus.

rauben
quelle
10

Eigentlich bin ich mir ziemlich sicher, dass Reflector als Disassembler mit einigen Decompiler-Funktionen angesehen wird. Disassembler, weil er die Bytes aus der Datei einer Assembly liest und in eine Assemblersprache konvertiert (in diesem Fall ILasm). Die Decompiler-Funktionalität, die es bietet, indem die IL in bekannte Muster (wie Ausdrücke und Anweisungen) analysiert wird, die dann in übergeordnete Sprachen wie C #, VB.Net usw. übersetzt werden. Mit der Add-In-API für Reflector können Sie Ihren eigenen Sprachübersetzer schreiben, wenn Sie wünschen ... aber die Magie, wie es die IL in die Ausdrucksbäume analysiert, ist ein streng gehütetes Geheimnis.

Ich würde empfehlen, sich eines der drei oben genannten Dinge anzuschauen, wenn Sie verstehen möchten, wie IL-Disassembler funktionieren: Dile, CCI und Mono sind gute Quellen für dieses Zeug.

Ich empfehle außerdem dringend, die Ecma 335-Spezifikation und das Buch von Serge Lidin zu erwerben.

Jason Haley
quelle
Dieser Link scheint ausgefallen zu sein
Lyra
Ja, tut mir leid, dass ich diese Seite letztes Jahr heruntergefahren und nicht ersetzt habe.
Jason Haley
8

Der Hauptgrund, warum ich Reflector verwendet habe (und ich denke, der Hauptgrund, warum die meisten Leute es verwendet haben), war der Dekompiler: Es kann die IL einer Methode zurück in den Quellcode übersetzen.

In dieser Hinsicht Monoflector wäre das Projekt, das es zu beobachten gilt. Es verwendet Cecil, das die Reflexion durchführt, und Cecil.Decompiler, das die Dekompilierung durchführt. Monoflector überlagert jedoch beide Bibliotheken mit einer Benutzeroberfläche, die Ihnen eine sehr gute Vorstellung von der Verwendung der API geben sollte.

Monoflector ist auch eine gute Alternative zu Reflector. Sie können damit die Typen durchsuchen und die Methoden dekompilieren. Dies entspricht 99% der Verwendung von Reflector. Es ist sehr rau an den Rändern, aber ich denke, das wird sich schnell ändern.

Joe White
quelle
5

Nun, Reflector selbst ist eine .NET-Assembly, sodass Sie Reflector.exe in Reflector öffnen können, um zu überprüfen, wie es erstellt wurde.

Andrew Hare
quelle
14
Nein, das kannst du nicht. Der Reflektor ist verschleiert.
Jeff Yates
14
Sie können Reflector nicht in Reflector öffnen? Ich habe es gerade getan - Verschleierung beeinträchtigt einfach die Lesbarkeit der IL, da Bezeichner und Typnamen entstellt sind, aber das bedeutet nicht, dass Sie sie nicht zerlegen können.
Andrew Hare
13
Andrew - wenn Sie in einem Loch sind, hören Sie auf zu graben ...
MagicAndi
2
Hmm ... Ich habe Version 5.1.6.0 und kann die Quelle gut sehen - nur die Bezeichnernamen sind verschleiert. Nicht perfekt, ja, aber ich schaue gerade auf die C # -Quelle von Reflector. :)
Andrew Hare
7
@ Andrew Hare: Wenn Sie versuchen, Methodenimplementierungen über Reflektor im Reflektor zu betrachten, wird "Dies ist verschleiert" angezeigt und es wird nicht angezeigt, also nein, Sie können Reflektor nicht verwenden. Außerdem ist es ein Verlust, pedantisch zu sein, was das OP mit dem OP will.
Jeff Yates
3

Ich arbeite derzeit an einem Open-Source-Disassembler / Decompiler namens Assembly Analyzer. Es generiert Quellcode für Methoden, zeigt Assembly-Metadaten und -Ressourcen an und ermöglicht es Ihnen, Abhängigkeiten zu durchlaufen.

Das Projekt wird auf CodePlex gehostet => http://asmanalyzer.codeplex.com/

Codewhisperer84
quelle
1

Das Reflektor-Werkzeug verwendet Reflection.   - Anscheinend ist das nicht richtig.

Sie haben nach zwei Dingen gefragt - Code, der zeigt, was der Reflektor tut, und auch eine Alternative zum Reflektor.

Hier ist ein Beispiel, das stark vereinfacht ist, aber es zeigt die Technik der Reflexion: TypeView.cs

Ich habe keinen Vorschlag für einen Open-Source-Reflektorersatz.

Cheeso
quelle
Ähm, wenn Sie mit "Reflection" auf "System.Reflection" des .NET Frameworks verweisen, würde ich das sehr bezweifeln.
Christian.K
3
@ Christian.K: Nein, Reflector wird System.Reflectionim Framework nicht verwendet , sagte Roeder sehr früh aufgrund von Problemen beim Laden und Entladen von Baugruppen.
CasperOne
@casperOne, ich weiß nicht genau, wie .NET Reflector intern funktioniert, aber der System.ReflectionNamespace wurde seit den Anfängen von .NET Reflector erweitert. Es unterstützt jetzt das Laden und Entladen von Assemblys in einem reinen
Drew Noakes
1
@Drew Noakes: Dies ist wahr, aber Roeder hat (meines Wissens) nie angegeben, dass er nach dieser Änderung wieder zu Reflection zurückgekehrt ist.
CasperOne