Olá meu caro leitor! Faz um (bom) tempo que não posto um artigo aqui, né? Como foi a sua passagem de ano? A minha foi “male mal”... Quem lê o NM Light vai saber o motivo :).

Vamos começar 2012 falando sobre uma ferramenta que pode salvar vidas (tá, estou exagerando, mas pode salvar carreiras hehe) de quem desenvolve em .NET. Quando você pega um projeto que usa algumas bibliotecas feitas pelo desenvolvedor anterior, você PRECISA fazer algumas alterações nela ou, no meu caso, compilar o projeto com um componente mais atual porque se for usar a biblioteca original ele OBRIGA A USAR a versão antiga e que o fonte foi pras cucuias?

De posse da biblioteca original você poderá ver o código-fonte usando uma ferramenta oferecida pelo próprio Visual Studio: IL Disassembler, ou IL DASM para os mais chegados. Mas tem um porém: ela apresenta o código na Common Intermediate Language (CIL), o código que o compilador JIT do .NET Framework traduz para código de máquina e por fim é executado. Bem, não é nada produtivo ficar tentando entender a IL, certo?

Há algum tempo atrás, existia uma ferramenta gratuita chamada .NET Reflector. Esta ferramenta traduzia a IL para C# ou outras linguagens da plataforma .NET e exportava para um projeto, prontinho para compilar. Um porém desta ferramenta é que ela forçava os updates automáticos, de forma que se a rotina de atualização fosse cancelada o programa “matava a si próprio”, ou seja, era apagado do disco. E não adiantava reinstalar. No fim, o desenvolvedor vendeu o .NET Reflector para a empresa Red Gate, que continua o seu desenvolvimento porém o aplicativo agora é pago e a versão Standard custa US$ 35,00 (fonte: http://www.reflector.net/).

Dando uma pesquisada por aí, achei um substituto legal e que cumpre ao meu propósito: o IL Spy. Ele também é um “disassembler” para .NET, que traduz o código em IL para C# e permite salvar o projeto. Só que com um detalhe: é de código-aberto e grátis (lembre-se que uma característica não implica em ter a outra ;)).

Captura de tela do IL Spy

Com ele, consegui pegar todas as classes que precisava, colar em um novo projeto, referenciar as bibliotecas mais atuais e compilar. Mas nem tudo são flores: Ele traduz o código de algumas propriedades, principalmente indexadas, colocando no lugar da propriedade a chamada para seu método ancestral, “getter” ou “setter”, por exemplo:

//Como a propriedade é colocada no código original:
MeuDataSet.Tables[i];
MeuArrayList.Count;
MeuDataRow["CAMPO"] = valor;

//Como ela é traduzida pelo IL Spy
MeuDataSet.get_Tables(i);
MeuArrayList.get_Count();
MeuDataRow.set_Row("CAMPO",valor);

Quando compilava sem fazer o devido ajuste ocorria um erro de compilação, pois os getters e setters das propriedades exemplificadas acima não são métodos públicos, portanto não poderiam ser acessados de fora da classe onde foram declarados.

Tirando esse pequeno atormento (que dependendo do código se torna um grande atormento...), repito que a ferramenta atendeu os meus objetivos e a recomendo em casos de emergência ou até mesmo para estudo de fontes (desde que não estejam ofuscados, claro!).

Onde baixar? Aqui: http://wiki.sharpdevelop.net/ILSpy.ashx