Alternative open source a Reflector? [chiuso]


419

Solo per chiedere se qualcuno conosce un'alternativa open source a RedGate's Reflector ? Sono interessato a scoprire come funziona effettivamente uno strumento simile a Reflector.

Nota, se conosci un'alternativa gratuita ma non open source a Reflector, puoi rispondere alla seguente domanda correlata:

Riepilogo: aggiornato l'11 maggio 2011

Una rapida carrellata dei vari progetti e strumenti open source proposti:

  1. Common Compiler Infrastructure (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy (fork di ILSpy, il progetto appare più attivo dell'originale)
  5. Dotnet IL Editor (DILE)
  6. IL.View
  7. Monoflector ( non più attivo da aprile 2011)

Possono essere interessanti anche le seguenti risorse:


2
Cordiali saluti, ora c'è una versione di v6 che sarà gratuita a tempo indeterminato
thecoop


2
@Matt, se controlli le date, questa domanda è stata posta prima di Qualcosa di meglio di .NET Reflector? domanda. Inoltre, questa domanda richiede specificamente alternative open source.
MagicAndi,

Risposte:


31

2 opzioni che conosco.

  • CCI
  • Mono Cecil

Questi non ti daranno C # però.


Leppie, grazie. Lo accetto come risposta, anche se è stata una scelta difficile tra la tua risposta e Jason Haley.
MagicAndi,

CCI non ha un front-end GUI (di cui sono a conoscenza). Ma nell'attuale sorgente in codeplex c'è un'API piuttosto semplice per convertire l'AST decompilato in C #, fyi.
justin.m.chase

2
Mono.Cecil è solo una libreria, giusto?
Robert Jeppesen,

175

Aggiornato il 13 dicembre 2011

Sono disponibili i seguenti strumenti open source:

  • ILSpy del team SharpDevelop. Grazie al tweet di Scott Hanselman che evidenzia lo strumento.
  • Dotnet IL Editor (un disassemblatore)
  • IL.View - un'alternativa di .NET Reflector scritta in Silverlight 4 come applicazione Silverlight fuori dal browser. Vedi questo post del blog per i dettagli.

1
Ho usato il dile alcuni anni fa - è un ottimo disassemblatore E debugger - lo consiglio vivamente quando lo stavo usando. Non lo uso da un po 'però.
Jason Haley l'

8
L'attuale versione di ILSpy (ILSpy v1.0.0.440, 20010228) funziona come mi aspettavo. Posso sfogliare metodi, proprietà e persino codice sorgente per una libreria C # senza il file PDB.
mathijsuitmegen,

6
Ho appena iniziato a usare ILSpy. Molto soddisfatto finora. Sostituibile perfetto. Grazie SharpDevelop!
codemonkey

1
Mi sono appena imbattuto in questo strumento, molto felice di vedere un sostituto per una graffetta nella cintura degli strumenti dello sviluppatore .NET. Alcune delle decompilazioni sono un po 'strane (la concatenazione di stringhe si presenta come la vedrebbe IL, ma non necessariamente come è stato scritto il codice - non è una brutta cosa), ma nel complesso, un ottimo strumento!
CodeMonkey1313,

5
Ho appena provato ILSpy e funziona benissimo! Ricostruisce persino le espressioni lambda e i metodi iteratori ("return return") ... wow! Sono impressionato!
Qwertie,

38

Un altro sostituto sarebbe dotPeek . JetBrains lo ha annunciato come uno strumento gratuito. Probabilmente avrà più funzionalità se usato con il loro Resharper ma anche se usato da solo funziona molto bene.

L'esperienza dell'utente è più simile a MSVS che a un disassemblatore autonomo. Mi piace leggere il codice più che in Reflector. Anche la navigazione Ctrl + T mi sta meglio. Sincronizzare semplicemente l'albero con il riquadro del codice potrebbe essere migliore.

Tutto sommato, è ancora in fase di sviluppo ma già ben utilizzabile.


2
Ottimo strumento, ma non open source. È gratuito, tuttavia, il che può significare che ruba i riflettori da qualsiasi equivalente open source.
Drew Noakes,

Ferdinando, -1 per uno strumento a sorgente chiuso. Dovresti provare ad aggiungere questo a una delle domande collegate per Reflector.
MagicAndi,

3
Lascio qui la mia risposta per rendere le informazioni più complete. Questa discussione è la più facile da trovare su Google e anche l'elenco di altri strumenti qui è il più completo. (Non tutti sono OSS tra il.)
Ferdinand Prantl,

Ferdinando, ho costantemente ridimensionato tutte le risposte che forniscono soluzioni a sorgente chiuso, aggiornato ripetutamente il testo della domanda per specificare che sono interessato solo all'OSS e assicurato che tutte le soluzioni nel riepilogo della domanda siano open source. C'è solo un'altra soluzione a codice chiuso in questo thread di domande, che ho anche sottoposto a downgrade. Questa domanda è stata posta prima della decisione di Redgate di riaddebitare all'inizio di quest'anno e in particolare chiede alternative open source. Cos'altro devo fare?
MagicAndi,

9
@MagicAndi Smettere di lamentarsi sarebbe un inizio. Ho trovato questa discussione da Google mentre cercavo un'alternativa gratuita. Non potrebbe importarmene di meno se è open source o meno. @Ferdinand grazie per il link dotPeek, sembra promettente.
Winston Smith,

15

Telerik ha rilasciato oggi una versione beta del proprio strumento di decompilazione, JustDecompile . Fonte chiusa, ma gratuita e sembra promettente.


Ray, mi scuso, ma per essere coerente con l'approccio alla risposta di GrayWolf, dovrò votare a fondo questa risposta. Questa domanda è specifica per le alternative Open Source. La comunità .NET ha permesso a se stessa di entrare in questo pasticcio affidandosi a una soluzione a codice chiuso; dovremmo evitarlo in futuro, indipendentemente da chi fornirà lo strumento. -1
MagicAndi,

Ray, risulta che il mio suggerimento di Kaliro sia anche un'utilità chiusa. Sentiti libero di ricambiare il voto negativo - me lo merito! Sfortunatamente, non puoi votare le tue risposte, su o giù.
MagicAndi,

1
@MagicAndi - Sarebbe più semplice eliminare la tua risposta che ridimensionarla. Se non senti che aggiunge alcun valore, allora hai il potere di far "sparire".
jpierson,

1
Non rimuovere / sottovalutare questa risposta. Altre domande SO sulle alternative gratuite vengono chiuse come "duplicati" di questa domanda dai moderatori! quindi vale la pena essere qui.
Alex

JustDecompile è un'applicazione vergognosamente buggy che si blocca continuamente e mostra molte eccezioni dove dovrebbe essere il codice. A parte questo è molto lento. .NET Reflector è MOLTO meglio di quella merda!
Elmue,

12

ILSpy funziona alla grande!

Per quanto ne so, fa tutto ciò che Reflector ha fatto e ha lo stesso aspetto.


10

In realtà, sono abbastanza sicuro che Reflector sia considerato un disassemblatore con alcune funzionalità di decompilatore. Disassemblatore perché legge i byte dal file di un assembly e lo converte in un linguaggio assembly (ILasm in questo caso). La funzionalità di Decompiler che fornisce analizzando l'IL in schemi ben noti (come espressioni e dichiarazioni) che vengono poi tradotti in linguaggi di livello superiore come C #, VB.Net, ecc. L'adpi api per Reflector consente di scrivere il proprio traduttore di lingua se desideri ... tuttavia la magia di come analizza l'IL negli alberi delle espressioni è un segreto strettamente custodito.

Consiglierei di esaminare una delle tre cose menzionate sopra se vuoi capire come funzionano i disassemblatori IL: Dile, CCI e Mono sono tutte buone fonti per queste cose.

Consiglio vivamente anche di ottenere le specifiche Ecma 335 e anche il libro di Serge Lidin.


questo link sembra inattivo
Lyra

Sì, mi dispiace di aver rimosso quel sito l'anno scorso e non l'ho sostituito.
Jason Haley,

8

Il motivo principale per cui ho usato Reflector (e, credo, il motivo principale per cui la maggior parte delle persone lo ha usato) è stato per il suo decompilatore: può tradurre l'IL di un metodo in codice sorgente.

Su questo punto, Monoflector sarebbe il progetto da guardare. Usa Cecil, che fa la riflessione, e Cecil.Decompiler, che fa la decompilazione. Ma Monoflector sovrappone un'interfaccia utente sopra entrambe le librerie, il che dovrebbe darti un'ottima idea di come utilizzare l'API.

Monoflector è anche una buona alternativa a Reflector. Ti permette di sfogliare i tipi e decompilare i metodi, che è il 99% di ciò per cui le persone hanno usato Reflector. È molto agitato attorno ai bordi, ma sto pensando che cambierà rapidamente.


5

Bene, Reflector stesso è un assembly .NET in modo da poter aprire Reflector.exe in Reflector per verificare come è costruito.


14
No, non puoi. Il riflettore è offuscato.
Jeff Yates,

14
Non puoi aprire Reflector in Reflector? L'ho appena fatto: l'offuscamento danneggia semplicemente la leggibilità dell'IL poiché identificatori e nomi dei tipi sono alterati, ma ciò non significa che non puoi smontarlo.
Andrew Hare,

13
Andrew - quando
sei

2
Hmm ... Ho la versione 5.1.6.0 e posso vedere bene la fonte - solo i nomi degli identificatori sono offuscati. Non perfetto sì, ma sto guardando la fonte C # di Reflector in questo momento. :)
Andrew Hare,

7
@Andrew Hare: se provi a guardare le implementazioni del metodo tramite reflector nel reflector vedrai "Questo è offuscato" e non lo mostrerà quindi no, non puoi usare Reflector. Inoltre, essere pedanti su ciò che l'OP vuole con l'OP è una battaglia persa.
Jeff Yates,

3

Attualmente sto lavorando a un disassemblatore / decompilatore open source chiamato Assembly Analyzer. Genera codice sorgente per metodi, visualizza metadati e risorse di assembly e consente di esplorare le dipendenze.

Il progetto è ospitato su CodePlex => http://asmanalyzer.codeplex.com/


1

Lo strumento Reflector utilizza Reflection.   - apparentemente questo non è corretto.

Hai chiesto due cose: il codice che mostra cosa fa il riflettore e anche un'alternativa al riflettore.

Ecco un esempio, molto semplificato da ciò che fa Reflector, ma mostra la tecnica di riflessione: TypeView.cs

Non ho un suggerimento per una sostituzione del riflettore open source.


Uhm, se con "Reflection" fai riferimento a "System.Reflection" del framework .NET, ne dubiterei moltissimo.
Christian.K,

3
@ Christian.K: No, Reflector non utilizza System.Reflectionnel framework, ha affermato Roeder molto presto a causa di problemi con il caricamento e lo scaricamento dell'assembly.
casper:

@casperOne, non so esattamente come funzioni .NET Reflector internamente, ma lo System.Reflectionspazio dei nomi è stato esteso sin dai primi giorni di .NET Reflector. Supporta ora il caricamento e lo scaricamento di assiemi in un contesto di sola riflessione: stackoverflow.com/questions/225330/…
Drew Noakes,

1
@Drew Noakes: Questo è vero, ma Roeder non ha mai dichiarato (per quanto ne so) di essere tornato a Reflection dopo aver apportato questa modifica.
casperOne
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.