C#4.0在运行时使用Reflection.Emit来更改方法的返回值

时间:2014-01-07 05:37:30

标签: c# .net dll reflection

在我正在制作插件的程序中,加载了多个.dll文件。我特别感兴趣的其中一个.dll /库/程序集。这个程序集包含一个带有返回布尔值的方法的类。我希望能够使用Reflection.Emit来改变那些方法将返回的内容(也许是在启动时?)。需要注意的一些事项:

  • 我无法访问.dll的原始源代码。
  • 我不想使用Plan B并使用Reflector反编译引用的程序集,修复bug并重新编译。

一切正常的方式是我的所有代码当前都被编译成一个dll,作为真实程序的插件运行。我真的需要能够覆盖/重写方法体/更改程序正在使用的程序集的返回值。我唯一听到的是Reflection.Emit可能是我的希望。这只是一个希望我深入潜水的人的提示。

编写程序集 - 来自program.dll的代码:

public virtual bool exampleBool(bool b)
{
    return b;
}

代码我想在My-plugin-for-program.dll中替换它:

public virtual bool exampleBool(bool b)
{
    return true;
}

这只是一个例子。我想学习并使任何提供的教程和资源适应我想要实现的目标。我没有提供我想要替换的实际代码,因为它太块了。

0 个答案:

没有答案