PDA

View Full Version : [.NET] Modificare un Assembly


tomminno
31-03-2008, 13:45
Ho un assembly, senza i sorgenti, in cui c'è un errore abbastanza grave che avrei urgenza di risolvere, grazie a Reflector ho trovato l'errore nel codice, a questo punto però mi servirebbe editare l'assembly.

In teoria potrei ritirare fuori il codice di tutti gli assembly e ricreare una soluzione cercando di far funzionare il tutto.

Esistono alternative per modificare il codice?

gugoXX
31-03-2008, 14:52
Una volta, 2-3 anni fa, l'ho fatto per un prodotto commerciale.
Avevamo trovato un baco in una release di un componente che avevamo acquistato. Abbiamo chiesto al loro supporto tecnico di correggere il baco, e ci dissero che l'avrebbero fatto per la prossima release, che pero' sarebbe stata rilasciata non prima di 2 mesi dopo.
Inutile dire che per noi era troppo tardi, e il nostro prodotto rischiava di essere visto male per colpa di quel baco di terze parti.

E' stato fatto uno studio di fattibilita' per correggere il baco internamente, ed era stato trovato questo modo. In realta' non l'abbiamo poi sfruttato, ma un mio collega era riuscito nell'intento:

Per nostra fortuna l'azienda fornitrice non aveva chiuso le classi del componente con la keyword "sealed".
Il collega aveva quindi derivato una nostra classe a partire dalla loro, facendo l'override del metodo sbagliato (con la keyword new, ovviamente non era virtual nella loro classe). Ha quindi copiato il codice decompilato da reflector, per poi modificarlo.
Fare cosi' e' sicuramente meno invasivo della decompilazione di tutto. Non mi e' mai venuto fuori un codice decompilato che si potesse poi di nuovo ricompilare.
Ma se e' il contenuto di un metodo solo...

Ovviamente per poterlo fare devi essere molto fortunato. Devi sperare che le loro variabili interne siano state dichiarate come protected e devi sperare che la loro classe non sia sealed.

Provare costa poco.

tomminno
07-04-2008, 10:47
Il mio problema è che dovrei modificare il code behind di una pagina asp.net, quindi non posso usare l'ereditarietà :cry: