.net - 修改并运行现有的 .NET 程序集而不保存到磁盘

标签 .net reflection clr

有什么方法可以修改现有 .NET 程序集中的方法,并在不将其保存到磁盘的情况下执行该程序集。我想要类似于 System.Reflection.Emit.MethodRental 的功能但是 Reflection.Emit 命名空间只处理动态创建的程序集。有许多方法涉及创建新的可执行文件。或修改现有的,但我想避免执行其中任何一项。

我也可以使用 CLR 探查器的 JIT 编译 Hook 来重写方法体,但更喜欢可以在 C# 中完成的方法。用例作为分析器的一部分,在函数入口/导出处输出程序值。

最佳答案

如果您有修改后的二进制内容,您可以使用 Assembly.Load(byte[]) .但是,您不能修改已加载 程序集 - 您必须单独处理这些修改。

如果您要重复执行此操作(如果只执行一次,则可能不需要),您可能还想看看在单独的 AppDomain 中运行它。

关于.net - 修改并运行现有的 .NET 程序集而不保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4645368/

相关文章:

.net - 我可以通过 CRM 2011 中的插件创建非事件记录吗?

c# - 传递参数给线程问题

c# - 获取扩展方法中第一个参数的名称?

java - 字段的 get(Object obj) 不适用于实例变量

c# - sqlDecimal 到十进制 clr 存储过程无法将类型 'System.Data.SqlTypes.SqlDecimal' 的对象转换为类型 'System.IConvertible'

c# - 如果时区规则更改,以前保存的日期时间的 UTC 到本地时间转换

c# - GetMethod 当参数通过引用出现时

c# - Convert.ToBoolean() 采用 bool 参数的理由是什么?

c# - IL 指令 "cpobj"是否适用于引用类型?

.net - 禁用 Azure Web Apps 中的自定义错误页面