假设我在第三方dll中有一个私有的“实例”非静态bool方法。所有这些方法都会返回一个值。没有其他的。我将如何去截取对此方法的调用,更改它的IL OpCodes /方法体,或者将它重定向到一个额外的,重写的或派生的方法。C#拦截/更改/重定向方法
我不想反编译第三方DLL,手动更改源代码并重新编译它。 我也宁愿不将程序集保存到磁盘,因为这也涉及使用“重新编译的”程序集而不是原始程序集。
我基本上想要能够使用原始的dll - 没有替换或文件的变化。我只想做我上面提到的。
有什么办法可以解决这个问题吗?如果是这样,你可以详细说明或发布参考文献/教程/等。另外,我知道虚拟,重写和新修饰符,但请记住我:没有所述第三方DLL的来源,无法访问源代码,也不想用诸如dotPeek并重新编译。
谢谢!
编辑: 我忘了提及基础架构的其余部分: MainProgram加载ThirdPartyDLL。 MainProgram也加载MyPluginDLL。 我试图从MyPluginDLL中更改ThirdPartyDLL中的方法,以便在MainProgram调用所述方法时,它将调用更改的方法。我希望能够在不保存新程序集的情况下执行此操作,并使用新程序集重新启动MainProgram。实质上,我想在启动时或MainProgram运行时执行此操作。
我敢打赌你正在寻找[Mono.Cecil](http://www.mono-project.com/Cecil)。 [教程在这里](http://stackoverflow.com/questions/1513319/mono-cecil-documentation-and-tutorials) – Measuring
@Measuring,我知道我是。但我在哪里看?我只知道ReadAssembly和SaveAssembly。请记住,我不想保存和使用新的程序集。我想使用相同的程序集文件/ DLL,而不必保存更改后的文件。 – user3150838
你是想拦截这个方法的所有调用,或者只是你对这个方法的调用? –