2011-01-10 42 views
3

有什么方法可以修改现有.NET程序集中的方法,并执行程序集而不将其保存到磁盘。我想要的功能与System.Reflection.Emit.MethodRental类似,但Reflection.Emit命名空间只处理动态创建的程序集。有许多方法涉及到创建一个新的可执行文件。或修改现有的,但我想避免做这些。修改并运行现有.NET程序集而不保存到磁盘

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

+1

CLR Profiler API将是最小的努力,但这仍然是一个很大的努力。 – leppie 2011-01-10 09:46:52

回答

2

如果您有修改的二进制内容,您可以使用Assembly.Load(byte[])。但是,您不能修改装配的零件 - 您必须单独处理修改。

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