有什么方法可以修改现有 .NET 程序集中的方法,并在不将其保存到磁盘的情况下执行该程序集。我想要类似于 System.Reflection.Emit.MethodRental
的功能但是 Reflection.Emit
命名空间只处理动态创建的程序集。有许多方法涉及创建新的可执行文件。或修改现有的,但我想避免执行其中任何一项。
我也可以使用 CLR 探查器的 JIT 编译 Hook 来重写方法体,但更喜欢可以在 C# 中完成的方法。用例作为分析器的一部分,在函数入口/导出处输出程序值。
最佳答案
如果您有修改后的二进制内容,您可以使用 Assembly.Load(byte[])
.但是,您不能修改已加载 程序集 - 您必须单独处理这些修改。
如果您要重复执行此操作(如果只执行一次,则可能不需要),您可能还想看看在单独的 AppDomain
中运行它。
关于.net - 修改并运行现有的 .NET 程序集而不保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4645368/