46 votes

Comment remplacer une classe dans une dll?

Le sujet est assez vague car je ne suis pas sûr de la terminologie correcte pour ce que j'essaie de faire.

J'ai téléchargé une dll (je n'ai pas le code source), et en utilisant un outil de réflexion, j'ai trouvé un bug dans l'implémentation de la dll. Le bug est facile à corriger. Donc disons que le bug est ici :

classe A 
{
    void f() { // BUG !!! }
}

Y a-t-il un moyen d'implémenter ma propre A qui corrigerait le bug et de l'injecter en temps d'exécution pour remplacer d'autres instances de A ?

73voto

HABJAN Points 5681

Si vous utilisez .NET 4.0 ou une version supérieure, jetez un œil à: Méthode MethodRental.SwapMethodBody

Autre méthode: Injection CLR: Remplacement de méthode à l'exécution

7voto

danish Points 2664

Le moyen le plus simple serait d'hériter de cette classe et d'écrire votre propre implémentation.

  class ParentClass
            {
                public void SomeMethod() { 
                   //bug here 
                }
            }

            class Child:ParentClass
            {
                new public void SomeMethod() { 
                   // I fixed it 
                }
            }

Ensuite, utilisez votre classe.

Child child = new Child();
child.SomeMethod();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X