【问题标题】:Looking for a way to manipulate .Net CIL at runtime寻找一种在运行时操作 .Net CIL 的方法
【发布时间】:2011-04-28 17:11:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我从来没有使用过Mono.Cecil 来生成动态代码(不过,如果你想检测程序集,它确实会让你的生活变得更轻松)。

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

    【讨论】:

      【解决方案2】:

      查看 .net 4 中的新功能,我认为您要查找的大部分内容都在 System.Dynamic 命名空间中。

      DuckTyping查看这篇文章

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2021-06-06
          • 1970-01-01
          • 2012-07-05
          • 1970-01-01
          • 2012-10-07
          • 1970-01-01
          • 1970-01-01
          • 2019-08-31
          • 2020-12-22
          相关资源
          最近更新 更多