Alternativas de fonte aberta para refletor?

Só para perguntar se alguém sabe de uma alternativa de código aberto ao Refletor da RedGate? Estou interessado em verificar como uma ferramenta semelhante ao Reflector realmente funciona.

Observe que, se você souber de uma alternativa gratuita, mas não de fonte aberta, ao Reflector, poderá responder à seguinte pergunta relacionada:

  • Algo melhor que o .NET Reflector?

Resumo – Atualizado em 11 de maio de 2011

Um rápido resumo dos vários projetos e ferramentas de código aberto que foram sugeridos:

  1. Infraestrutura Comum de Compiladores (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy (fork do ILSpy, o projeto parece mais ativo que o original)
  5. Dotnet IL Editor (DILE)
  6. IL.Vista
  7. Monoflector ( não está mais ativo em abril de 2011)

Os seguintes resources também podem ser de interesse:

  • TypeView.cs
  • Notas de Jason Haley sobre como desmontar o .NET
  • O recente post do blog do Adrian Bank resumindo várias alternativas do Refletor, incluindo várias opções não mencionadas abaixo.
  • O post detalhado de Mark Lichtenberg, comparando várias alternativas de código aberto (DILE, ILSpy e Mono Cecil usando o MonoDevelop) ao Reflector.

2 opções que eu conheço.

  • CCI
  • Mono Cecil

Estes não lhe dará C # embora.

Atualizado em 13 de dezembro de 2011

As seguintes ferramentas de software livre estão disponíveis:

  • ILSpy da equipe SharpDevelop. Graças ao tweet de Scott Hanselman destacando a ferramenta.
  • Dotnet IL Editor (um desmontador)
  • IL.View – uma alternativa do .NET Reflector escrita no Silverlight 4 como um aplicativo Silverlight fora do navegador. Veja este blog para mais detalhes.

Outro substituto seria dotPeek . A JetBrains anunciou isso como uma ferramenta gratuita. Ele provavelmente terá mais resources quando usado com o Resharper, mas mesmo quando usado sozinho, funciona muito bem.

A experiência do usuário é mais parecida com o MSVS do que com um desmontador independente. Eu gosto de ler código mais do que no Reflector. Ctrl + T navegação me convém melhor também. Apenas sincronizar a tree com o painel de código pode ser melhor.

Tudo sumdo, ainda está em desenvolvimento, mas muito bem utilizável.

A Telerik lançou hoje um Beta de sua própria ferramenta de decompilation, JustDecompile . Fonte fechada, mas gratuita e parece promissora.

ILSpy funciona muito bem!

Tanto quanto eu posso dizer que faz tudo o que Reflector fez e parece o mesmo também.

Na verdade, tenho certeza que o Reflector é considerado um desassemblador com alguma funcionalidade descompiladora. Desassembler porque lê os bytes do arquivo de um assembly e o converte em uma linguagem assembly (ILasm, neste caso). A funcionalidade do Decompiler é fornecida analisando o IL em padrões bem conhecidos (como expressões e instruções) que depois são traduzidos em linguagens de nível mais alto como C #, VB.Net, etc. O addin api para Reflector permite que você escreva seu próprio tradutor de idioma se você deseja … no entanto, a mágica de como ele analisa o IL nas trees de expressão é um segredo bem guardado.

Eu recomendaria olhar para qualquer uma das três coisas mencionadas acima se você quiser entender como funcionam os desmontadores da IL: Dile, CCI e Mono são todas boas fonts para essas coisas.

Eu também recomendo pegar as especificações Ecma 335 e o livro de Serge Lidin também.

A principal razão pela qual eu usei o Reflector (e, penso eu, a razão principal pela qual a maioria das pessoas o usou) foi para o descompilador: ele pode traduzir o IL de um método de volta para o código-fonte.

Nesse ponto, Monoflector seria o projeto a ser observado. Ele usa Cecil, que faz o reflexo, e Cecil.Decompiler, que faz a descompilation. Mas o Monoflector coloca uma interface de usuário em cima das duas bibliotecas, o que deve lhe dar uma boa ideia de como usar a API.

O monoflector também é uma alternativa decente ao Reflector. Ele permite que você navegue pelos tipos e decompile os methods, o que é 99% do que as pessoas usaram para o Reflector. É muito difícil, mas acho que isso mudará rapidamente.

Bem, o Reflector em si é um assembly .NET para que você possa abrir o Reflector.exe no Reflector para verificar como ele é construído.

Atualmente estou trabalhando em um desmontador / descompilador de código aberto chamado Assembly Analyzer. Ele gera código-fonte para methods, exibe metadados e resources do assembly e permite percorrer as dependencies.

O projeto está hospedado no CodePlex => http://asmanalyzer.codeplex.com/

A ferramenta Reflector usa Reflexão. – aparentemente isso não está correto.

Você pediu duas coisas – código que mostra o que o refletor faz, e também uma alternativa ao refletor.

Aqui está um exemplo, muito simplificado do que o Reflector faz, mas mostra a técnica de reflection: TypeView.cs

Eu não tenho uma sugestão para uma substituição do Reflector de código aberto.