¿Alternativas de fuente abierta al reflector?

Solo para preguntar si alguien sabe de una alternativa de código abierto al Reflector de RedGate. Estoy interesado en verificar cómo funciona una herramienta similar a Reflector.

Tenga en cuenta que si conoce una alternativa gratuita a Open Source pero no de código abierto, puede responder la siguiente pregunta relacionada:

  • Algo mejor que .NET Reflector?

Resumen – Actualizado el 11 de mayo de 2011

Un resumen rápido de los diversos proyectos y herramientas de código abierto que se han sugerido:

  1. Infraestructura común del comstackdor (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy (fork de ILSpy, el proyecto parece más activo que el original)
  5. Dotnet IL Editor (DILE)
  6. IL.View
  7. Monoflector ( no activo a partir de abril de 2011)

Los siguientes recursos también pueden ser de interés:

  • TypeView.cs
  • Notas de Jason Haley sobre el desassembly de .NET
  • La publicación reciente del blog de Adrian Bank resume varias alternativas de Reflector, incluidas varias opciones que no se mencionan a continuación.
  • La publicación de blog detallada de Mark Lichtenberg comparando varias de las alternativas de código abierto (DILE, ILSpy y Mono Cecil usando MonoDevelop) con Reflector.

2 opciones que conozco

  • CCI
  • Mono Cecil

Sin embargo, estos no le darán C #.

Actualizado el 13 de diciembre de 2011

Las siguientes herramientas de código abierto están disponibles:

  • ILSpy del equipo de SharpDevelop. Gracias al tweet de Scott Hanselman destacando la herramienta.
  • Dotnet IL Editor (un desensamblador)
  • IL.View : una alternativa de .NET Reflector escrita en Silverlight 4 como una aplicación Silverlight fuera de navegador. Vea esta publicación en el blog para más detalles.

Otro reemplazo sería dotPeek . JetBrains lo anunció como una herramienta gratuita. Es probable que tenga más características cuando se usa con su Resharper, pero incluso cuando se usa solo, funciona muy bien.

La experiencia del usuario se parece más a MSVS que a un desensamblador independiente. Me gusta leer códigos más que en Reflector. La navegación Ctrl + T también me queda mejor. Simplemente sincronizar el árbol con el panel de código podría ser mejor.

En general, todavía está en desarrollo, pero ya se puede usar.

Telerik lanzó hoy una versión beta de su propia herramienta de descomstackción, JustDecompile . Fuente cerrada, pero gratis y se ve prometedor.

¡ILSpy funciona genial!

Por lo que puedo decir, hace todo lo que hizo Reflector y tiene el mismo aspecto también.

De hecho, estoy bastante seguro de que Reflector se considera un desensamblador con alguna funcionalidad decomstackdor. Desensamblador porque lee los bytes del archivo de un ensamblaje y lo convierte a un lenguaje ensamblador (ILasm en este caso). La funcionalidad del Descomstackdor proporciona analizando el IL en patrones bien conocidos (como expresiones y enunciados) que luego se traducen a lenguajes de nivel superior como C #, VB.Net, etc. El addin api para Reflector le permite escribir su propio traductor de idiomas si usted desea … sin embargo, la magia de cómo analiza el IL en los árboles de expresión es un secreto muy bien guardado.

Yo recomendaría ver cualquiera de las tres cosas mencionadas anteriormente si quiere entender cómo funcionan los desensambladores IL: Dile, CCI y Mono son buenas fonts para este tipo de cosas.

También recomiendo obtener la especificación Ecma 335 y el libro de Serge Lidin también.

La razón principal por la que utilicé Reflector (y, creo, la razón principal por la que la mayoría de la gente lo usaba) era por su descomstackdor: puede traducir el IL de un método nuevamente en código fuente.

En ese aspecto , Monoflector sería el proyecto a seguir. Utiliza Cecil, que hace el reflection, y Cecil.Decompiler, que hace la descomstackción. Pero Monoflector coloca una interfaz de usuario en la parte superior de ambas bibliotecas, lo que le dará una muy buena idea de cómo usar la API.

Monoflector es también una alternativa decente al reflector. Te permite navegar por los tipos y descomstackr los métodos, que es el 99% de lo que las personas utilizan Reflector para. Es muy difícil en los bordes, pero estoy pensando que cambiará rápidamente.

Bueno, Reflector en sí mismo es un ensamblado .NET para que pueda abrir Reflector.exe en Reflector para ver cómo está construido.

Actualmente estoy trabajando en un desensamblador / descomstackdor de código abierto llamado Assembly Analyzer. Genera código fuente para métodos, muestra metadatos y recursos de ensamblaje, y le permite recorrer dependencias.

El proyecto está alojado en CodePlex => http://asmanalyzer.codeplex.com/

La herramienta Reflector usa Reflection. – aparentemente esto no es correcto.

Pidió dos cosas: código que muestra qué reflector hace, y también una alternativa al reflector.

Aquí hay un ejemplo, muy simplificado de lo que hace Reflector, pero muestra la técnica de la reflexión: TypeView.cs

No tengo una sugerencia para un reemplazo Reflector de fuente abierta.