.net - 在运行时替换 .NET 类型

我有一个 .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/

相关文章:

python - python中的文本压缩

objective-c - 将 IOKit IOReturn 错误代码映射到字符串

xml - 对齐 ="right"在 XML 中不起作用

oracle - 如何使用 pl/sql 循环接受用户输入?

php - preg_replace : how do I strip off all white

php - eval {php} 条件

perl - 我如何检查一个值是否在 Perl 的列表中?

sql-server - 在数据库中存储 & 符号

sql - 如何从 SQL Server 数据库可视化 nvarchar(max) 的值,其中 ma

sql-server - UPDATE 表中除 TOP 1 记录外的记录