Alternatives Open Source à Reflector? [fermé]

419

Il suffit de demander si quelqu'un sait d'une open source alternative à Redgate de réflecteur ? Je voudrais savoir comment fonctionne réellement un outil similaire à Reflector.

Notez que si vous connaissez une alternative gratuite mais pas open source à Reflector, vous pouvez répondre à la question connexe suivante:

Résumé - Mis à jour le 11 mai 2011

Un rapide tour d'horizon des différents projets et outils open source proposés:

  1. Infrastructure de compilateur commune (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy (fork d'ILSpy, le projet semble plus actif que l'original)
  5. Éditeur Dotnet IL (DILE)
  6. IL.View
  7. Monoflecteur ( plus actif depuis avril 2011)

Les ressources suivantes peuvent également être intéressantes:

  • TypeView.cs
  • Notes de Jason Haley sur le démontage de .NET
  • Le récent billet de blog d' Adrian Bank résumant un certain nombre d'alternatives Reflector, y compris plusieurs options non mentionnées ci-dessous.
  • Article de blog détaillé de Mark Lichtenberg comparant plusieurs des alternatives open source (DILE, ILSpy et Mono Cecil utilisant MonoDevelop) à Reflector.
MagicAndi
la source
2
Pour info, il existe maintenant une version de v6 qui sera gratuite indéfiniment: eon.businesswire.com/news/eon/20110426007021/en/.NET-Reflector/…
thecoop le
2
@Matt, si vous vérifiez les dates, cette question a été posée avant le quelque chose de mieux que .NET Reflector? question. En outre, cette question demande spécifiquement des alternatives open source.
MagicAndi

Réponses:

31

2 options que je connais.

  • CCI
  • Mono Cecil

Cependant, cela ne vous donnera pas C #.

leppie
la source
Leppie, merci. J'accepte cela comme la réponse, même si c'était un choix difficile entre votre réponse et celle de Jason Haley.
MagicAndi
CCI n'a pas d'interface graphique (à ma connaissance). Mais dans la source actuelle de codeplex, il existe une API assez simple pour convertir l'AST décompilé en C #, fyi.
justin.m.chase
2
Mono.Cecil est juste une bibliothèque, non?
Robert Jeppesen
175

Mise à jour 13 décembre 2011

Les outils open source suivants sont disponibles:

MagicAndi
la source
1
J'ai utilisé Dile il y a quelques années - c'est un excellent démonteur ET débogueur - je l'ai fortement recommandé lorsque je l'utilisais. Je ne l'ai pas utilisé depuis un moment cependant.
Jason Haley
8
La version actuelle d'ILSpy (ILSpy v1.0.0.440, 20010228) fonctionne comme je m'y attendais. Je peux parcourir les méthodes, les propriétés et même le code source pour une bibliothèque C # sans le fichier PDB.
mathijsuitmegen
6
Je viens de commencer à utiliser ILSpy. Très heureux jusqu'à présent. Replacemenet parfait. Merci SharpDevelop!
codemonkey
1
Je suis juste tombé sur cet outil, très heureux de voir un remplacement pour une agrafe dans la ceinture d'outils du développeur .NET. Certaines décompilations sont un peu bizarres (la concaténation de chaînes apparaît comme IL le verrait, mais pas nécessairement comme le code a été écrit - pas une mauvaise chose), mais dans l'ensemble, un excellent outil!
CodeMonkey1313
5
Je viens d'essayer ILSpy et cela fonctionne très bien! Il reconstruit même les expressions lambda et les méthodes d'itérateur ("yield return") ... wow! Je suis impressionné!
Qwertie
38

Un autre remplaçant serait dotPeek . JetBrains l'a annoncé comme un outil gratuit. Il aura probablement plus de fonctionnalités lorsqu'il est utilisé avec son Resharper mais même lorsqu'il est utilisé seul, il fonctionne très bien.

L'expérience utilisateur ressemble plus à MSVS qu'à un désassembleur autonome. J'aime la lecture de code plus que dans Reflector. La navigation Ctrl + T me convient aussi mieux. Il pourrait être préférable de simplement synchroniser l'arborescence avec le volet de code.

Dans l'ensemble, il est encore en développement mais déjà très bien utilisable.

Ferdinand Prantl
la source
2
Excellent outil, mais pas open source. Cependant, il est gratuit, ce qui peut signifier qu'il vole la vedette à tout équivalent open source.
Drew Noakes
Ferdinand, -1 pour un outil en source fermée. Vous devriez essayer d'ajouter ceci à l'une des questions liées pour Reflector.
MagicAndi
3
Je laisse ma réponse ici pour rendre les informations plus complètes. Ce fil est le plus facile à trouver par google et la liste des autres outils ici est la plus complète. (Tous ne sont pas OSS btw.)
Ferdinand Prantl
Ferdinand, j'ai systématiquement rétrogradé toutes les réponses qui donnent des solutions en source fermée, mis à jour le texte de la question à plusieurs reprises pour spécifier que je suis intéressé par OSS uniquement, et je me suis assuré que toutes les solutions dans le résumé de la question sont open source. Il n'y a qu'une seule autre solution de source fermée dans ce fil de questions, que j'ai également sous-estimée. Cette question a été posée avant la décision de Redgate de facturer plus tôt cette année et demande spécifiquement des alternatives open source. Que dois-je faire de plus?
MagicAndi
9
@MagicAndi Arrêter de se plaindre serait un début. J'ai trouvé ce fil de Google en cherchant une alternative gratuite. Je m'en fous que ce soit open source ou non. @Ferdinand merci pour le lien dotPeek, semble prometteur.
Winston Smith
15

Telerik a publié aujourd'hui une version bêta de son propre outil de décompilation, JustDecompile . Source fermée, mais gratuite et semble prometteuse.

ray glover
la source
Ray, je m'excuse, mais pour être cohérent avec l'approche de la réponse GrayWolf, je vais devoir voter contre cette réponse. Cette question concerne spécifiquement les alternatives Open Source. La communauté .NET s'est permise d'entrer dans ce pétrin en s'appuyant sur une solution de source fermée; nous devons éviter cela à l'avenir, peu importe qui fournit l'outil. -1
MagicAndi
Ray, ma suggestion Kaliro est également un utilitaire de source fermée. S'il vous plaît, n'hésitez pas à rendre le vote négatif - je le mérite! Malheureusement, vous ne pouvez pas voter sur vos propres réponses, ni à la hausse ni à la baisse.
MagicAndi
1
@MagicAndi - Il serait plus facile de supprimer votre réponse que de la déprécier. Si vous ne pensez pas que cela ajoute de la valeur, alors vous avez le pouvoir de faire "disparaître".
jpierson
1
Ne supprimez / ne supprimez pas cette réponse. D'autres questions SO sur les alternatives gratuites sont fermées en tant que «doublons» de cette question par les modérateurs! donc l'information vaut la peine d'être ici.
Alex
JustDecompile est une application honteusement boguée qui se bloque tout le temps et montre de nombreuses exceptions où le code devrait être. A part ça, c'est très lent. .NET Reflector est BEAUCOUP mieux que cette merde!
Elmue
12

ILSpy fonctionne très bien!

Pour autant que je sache, il fait tout ce que Reflector a fait et a la même apparence.

Rob
la source
10

En fait, je suis presque sûr que Reflector est considéré comme un désassembleur avec des fonctionnalités de décompilation. Désassembleur car il lit les octets du fichier d'un assembly et le convertit en langage d'assembly (ILasm dans ce cas). La fonctionnalité Decompiler qu'il fournit en analysant l'IL dans des modèles bien connus (comme des expressions et des déclarations) qui sont ensuite traduites dans des langages de niveau supérieur comme C #, VB.Net, etc. L'API addin pour Reflector vous permet d'écrire votre propre traducteur de langue si vous souhaitez ... cependant la magie de la façon dont il analyse l'IL dans les arbres d'expression est un secret bien gardé.

Je recommanderais de regarder l'une des trois choses mentionnées ci-dessus si vous voulez comprendre comment fonctionnent les désassembleurs IL: Dile, CCI et Mono sont toutes de bonnes sources pour ce genre de choses.

Je recommande également fortement d'obtenir la spécification Ecma 335 et le livre de Serge Lidin.

Jason Haley
la source
ce lien semble en panne
Lyra
Oui, désolé d'avoir supprimé ce site l'année dernière et je ne l'ai pas remplacé.
Jason Haley
8

La principale raison pour laquelle j'ai utilisé Reflector (et, je pense, la principale raison pour laquelle la plupart des gens l'ont utilisé) était pour son décompilateur: il peut traduire l'IL d'une méthode en code source.

À ce titre, Monoflector serait le projet à surveiller. Il utilise Cecil, qui fait la réflexion, et Cecil.Decompiler, qui fait la décompilation. Mais Monoflector superpose une interface utilisateur au-dessus des deux bibliothèques, ce qui devrait vous donner une très bonne idée de la façon d'utiliser l'API.

Le monoflecteur est également une alternative décente au réflecteur. Il vous permet de parcourir les types et de décompiler les méthodes, ce qui représente 99% de l'utilisation pour laquelle Reflector a été utilisé. C'est très rugueux sur les bords, mais je pense que cela changera rapidement.

Joe White
la source
5

Eh bien, Reflector lui-même est un assemblage .NET, vous pouvez donc ouvrir Reflector.exe dans Reflector pour vérifier comment il est construit.

Andrew Hare
la source
14
Non, tu ne peux pas. Le réflecteur est obscurci.
Jeff Yates
14
Vous ne pouvez pas ouvrir Reflector dans Reflector? Je viens de le faire - l'obscurcissement nuit simplement à la lisibilité de l'IL, car les identificateurs et les noms de type sont modifiés, mais cela ne signifie pas que vous ne pouvez pas le démonter.
Andrew Hare
13
Andrew - quand dans un trou, arrêtez de creuser ...
MagicAndi
2
Hmm ... J'ai la version 5.1.6.0 et je peux très bien voir la source - seuls les noms d'identifiants sont obscurcis. Pas parfait oui, mais je regarde la source C # de Reflector en ce moment. :)
Andrew Hare
7
@Andrew Hare: Si vous essayez de regarder les implémentations de méthode via le réflecteur dans le réflecteur, vous verrez "Ceci est obscurci" et il ne le montrera pas donc non, vous ne pouvez pas utiliser Reflector. De plus, être pédant sur ce que le PO veut avec le PO est une bataille perdue.
Jeff Yates
3

Je travaille actuellement sur un désassembleur / décompilateur open-source appelé Assembly Analyzer. Il génère du code source pour les méthodes, affiche les métadonnées et les ressources d'assembly et vous permet de parcourir les dépendances.

Le projet est hébergé sur CodePlex => http://asmanalyzer.codeplex.com/

Codewhisperer84
la source
1

L'outil Réflecteur utilise la réflexion.   - apparemment, ce n'est pas correct.

Vous avez demandé deux choses - un code qui montre ce que fait le réflecteur, et aussi une alternative au réflecteur.

Voici un exemple, beaucoup simplifié de ce que fait Reflector, mais il montre la technique de réflexion: TypeView.cs

Je n'ai pas de suggestion pour un remplacement de réflecteur open-source.

Cheeso
la source
Uhm, si avec "Reflection" vous faites référence à "System.Reflection" du framework .NET, j'en doute fortement.
Christian.K
3
@ Christian.K: Non, Reflector ne l'utilise pas System.Reflectiondans le framework, a déclaré Roeder très tôt en raison de problèmes de chargement et de déchargement des assemblages.
casperOne
@casperOne, je ne sais pas exactement comment .NET Reflector fonctionne en interne, mais l' System.Reflectionespace de noms a été étendu depuis les premiers jours de .NET Reflector. Il prend désormais en charge le chargement et le déchargement des assemblages dans un contexte de réflexion uniquement: stackoverflow.com/questions/225330/…
Drew Noakes
1
@Drew Noakes: C'est vrai, mais Roeder n'a jamais déclaré (à ma connaissance) qu'il était revenu à Reflection une fois ce changement effectué.
casperOne