是否有办法修改现有.NET程序集中的方法,并在不将其保存到磁盘的情况下执行该程序集。我想要类似于System.Reflection.Emit.MethodRental的功能,但是Reflection.Emit名称空间只处理动态创建的程序集。有许多方法涉及创建新的可执行文件。或者修改现有的一个,但是我想避免做这两件事。
我也可以使用CLR分析器的JIT编译钩子来重写方法体,但我更喜欢一种可以在C#中完成的方法。这个用例是分析器的一部分,它在函数入口/出口处输出程序值。
发布于 2011-01-10 18:52:41
如果你有修改过的二进制内容,你可以使用Assembly.Load(byte[])。但是,您不能修改已加载的程序集-您必须单独处理这些修改。
如果您重复执行此操作(如果只执行一次,则可能不需要),则可能还需要考虑在单独的AppDomain中运行此命令。
发布于 2011-01-10 21:17:52
看看.net 3附带的“表达式树”,它们也允许创建动态方法http://blogs.msdn.com/b/csharpfaq/archive/2009/09/14/generating-dynamic-methods-with-expression-trees-in-visual-studio-2010.aspx
还可以看看Mono.Cecil -这个库允许在运行时更改代码。
https://stackoverflow.com/questions/4645368
复制相似问题