我有一个 .NET 程序集,它在编译时定义了一个类型 T
,并且我实例化了一个对象 my_t
作为这个类型的实例。
我想知道是否可以在 .NET 中使用运行时编译器服务重新编译此类,然后将新类定义加载到当前正在执行的程序集中,所以当我调用 my_t,他们将使用新代码。
我不会更改任何方法的签名,只会更改方法主体。
有 .NET 专家知道这是否可行吗?在此先感谢您的帮助!
最佳答案
您可以交换方法实现,但仅如果运行不安全代码是一个选项,并且您要交换的方法尚未被 NGen 或“Zapped” .
基本过程在概念上非常简单:您将方法的 JIT 代码所在的内存地址与另一个方法的 JIT 代码的内存地址交换(您也可以强制 CLR 在首先,避免出现奇怪的先决条件问题)。
CodeProject.com 上有一个很棒的概念验证项目: http://www.codeproject.com/Articles/37549/CLR-Injection-Runtime-Method-Replacer
去看看吧!
https://stackoverflow.com/questions/1862561/