在运行时替换.NET类型

Mik*_*ike 1 .net

我有一个.NET程序集,它T在编译时定义了一个类型,并且我已经将对象my_t实例化为此类型的实例.

我想知道在.NET中是否有可能使用运行时编译器服务来重新编译这个类,然后将新的类定义加载到当前正在执行的程序集中,所以当我调用方法时my_t,它们将使用新代码.

我没有改变任何方法的签名,只是方法体.

任何.NET大师都知道这是否可行?在此先感谢您的帮助!

Bra*_*s83 7

可以交换方法实现,但只有在运行不安全的代码是一个选项时,您想要交换的方法还没有NGen或"Zapped".

基本过程在概念上非常简单:您将方法的JIT代码所在的内存地址与另一个方法的JIT代码的内存地址交换(您也可以强制CLR首先JIT您的方法,避免一个奇怪的先决条件问题).

CodeProject.com上有一个很好的概念验证项目:http: //www.codeproject.com/Articles/37549/CLR-Injection-Runtime-Method-Replacer

去看看吧!

  • 最后,一个问题的实际答案.谢谢! (4认同)