在Java中,我们使用了javaagent参数和ASM(http://asm.ow2.org/)实用程序来修改类加载器在内存中运行/加载时的字节代码。 (也就是动态地向类中的方法添加方法调用)。
这方面的一个示例就是删除对Log4j的所有调用以加速应用程序(http://surguy.net/articles/removing-log-messages.xml)。
我正试图弄清楚如何使用C#/ .Net在运行时执行相同的过程。我已经看到你可以操作.Net的CIL,但我还没有在运行时找到这个例子。
System.Reflection.Emit似乎是最接近.Net equitant的地方,您可以动态创建类,但有没有办法使用它来添加或覆盖现有的类?
答案 0 :(得分:2)
我从未使用Mono.Cecil来生成动态代码(如果您想要组装程序集,它确实让您的生活更加轻松。)
在.Net中如果要生成代码,可以使用System.CodeDom和System.Reflection.Emit。允许您动态注入方法的一个特别有用的类是DynamicMethod。
答案 1 :(得分:1)
查看.net 4中的新功能,我认为你所寻找的大部分内容都在System.Dynamic名称空间。查看DuckTyping上的这篇文章
答案 2 :(得分:0)
我看了它已经有一段时间了(我几乎是一个Java兔子),但我认为Mono项目有一个名为塞西尔的东西,它至少做了一些。