【问题标题】:Generating IL for .Net Platform为 .Net 平台生成 IL
【发布时间】:2011-06-01 05:35:46
【问题描述】:

我正在用 C# 编写一个小型编译器,并计划使用 System.Reflection.Emit 为 .Net 平台生成 IL 指令。我的问题是,建议使用 System.Reflection.Emit 为生产编译器生成 IL。

如果不建议使用 System.Reflection.Emit 为生产编译器生成 IL,我们是否有用于此目的的替代库/工具?

【问题讨论】:

    标签: c# compiler-construction il


    【解决方案1】:

    System.Reflection.Emit 适用于生产编译器,但您可能想看看mono-cecil

    【讨论】:

    • +1。 Microsoft.CCI 也是一个选项。似乎性能是该库中的一个重要考虑因素(显式名称表就是一个示例),因此它可能允许您制作更快的编译器。但在我有限的使用范围内,我更喜欢 Cecil 的 API。
    【解决方案2】:

    这是一篇博客文章,描述了 Reflection.Emit 的一些问题,这些问题可能不会严重限制您的项目,但您可以作为评判者:

    如果这些问题不困扰您,那么您可以使用这个 SO 问题来获取有关使用 Reflection.Emit 生成的提示并将程序集写入磁盘:

    【讨论】:

      【解决方案3】:

      虽然System.Reflection.Emit 让您进行代码生成,但它是 .NET 框架中最古老的代码生成 API,它需要了解 IL。 .NET 3.5 中引入并在 .NET 4.0 中扩展的表达式树(不能创建新类型),但它们可用于组装完整的方法体。

      【讨论】:

        【解决方案4】:

        Reflection.Emit一般没问题,但如果您生成的程序集不是针对同一平台(即您想构建 silverlight),IKVM.Reflection.Emit(可从 Mono 获得)可能有更多选择dll 来自您的编译器,它是用“完整的”.NET 编写的)。

        【讨论】:

        • 单声道在各个方面都很棒。他们构建了许多每个 .NET 开发人员都应该注意的很酷的东西。我不知道IKVM
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-08
        • 1970-01-01
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多