如何替换dll中的类?

Shm*_*opy 46 c# dll

这个主题很模糊,因为我不确定我正在尝试做什么的正确术语.

我已经下载了一个dll(我没有源代码),并使用反射工具,我在dll实现中发现了一个错误.这个bug很容易修复.所以我们假设错误在这里:

class A 
{
    void f() { // BUG!!! }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现我自己的 A修复bug并在运行时注入它来替换其他A实例?

HAB*_*JAN 73

如果您使用的是.NET 4.0.或更高,看看:MethodRental.SwapMethodBody方法

其他方式:CLR注入:运行时方法替换

  • @danish"该方法只能由创建动态模块的客户端调用,该动态模块包含正在交换方法体的类型." 这意味着没有权限提升,因为任何更改仅在您已控制的进程内可见. (3认同)
  • 你不能用这种方法删除许可证文件存在的检查吗? (2认同)

dan*_*ish 7

最简单的方法是从该类继承并编写自己的实现.

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

            class Child:ParentClass
            {
                new public void SomeMethod() { 
                   // I fixed it 
                }
            }
Run Code Online (Sandbox Code Playgroud)

在这之后,使用你的课程.

Child child = new Child();
child.SomeMethod();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您必须将其称为"Child"类型,甚至是`UseThatParentClass(ParentClass ins);` - >`UseThatParentClass(new Child());`将调用默认的SomeMethod(在ParentClass上调用bug,而不是在您的Child类中) )因为"新"关键字如何工作的方式 - 它没有像继承(虚拟/覆盖),更像是"两个方法有相同的名称" (5认同)