寻找一种在运行时操作.Net CIL的方法

时间:2011-04-28 17:11:20

标签: c# java .net asp.net c#-4.0

在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的地方,您可以动态创建类,但有没有办法使用它来添加或覆盖现有的类?

3 个答案:

答案 0 :(得分:2)

我从未使用Mono.Cecil来生成动态代码(如果您想要组装程序集,它确实让您的生活更加轻松。)

在.Net中如果要生成代码,可以使用System.CodeDomSystem.Reflection.Emit。允许您动态注入方法的一个特别有用的类是DynamicMethod

答案 1 :(得分:1)

查看.net 4中的新功能,我认为你所寻找的大部分内容都在System.Dynamic名称空间。查看DuckTyping上的这篇文章

答案 2 :(得分:0)

我看了它已经有一段时间了(我几乎是一个Java兔子),但我认为Mono项目有一个名为塞西尔的东西,它至少做了一些。