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 ILSpy. 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.
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
Créditos: Leonel Fraga
0 comentários:
Postar um comentário