为 .Net 平台生成 IL

发布于 2024-11-11 17:37:45 字数 188 浏览 5 评论 0原文

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

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

I’m writing a small compiler in C# and planning to generate IL instructions for .Net platform using System.Reflection.Emit. My question is, it is advisable to use System.Reflection.Emit for generating IL for production compilers.

If it is not advisable to use System.Reflection.Emit for generating IL for production compilers, do we have alternative libraries/tools for that purpose?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

放低过去 2024-11-18 17:37:45

System.Reflection.Emit 对于生产编译器来说很好,尽管您可能想看看

System.Reflection.Emit is fine for production compilers, though you may want to take a look at mono-cecil.

咆哮 2024-11-18 17:37:45

这是一篇博客文章,描述了 Reflection.Emit 的一些问题,这些问题可能对您的项目没有严重限制,但您可以做出判断:

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

Here is a blog article describing some problems with Reflection.Emit that probably aren't serious limitations for your project but you can be the judge:

If those issues don't bother you, then you can use this SO question for tips on the generation using Reflection.Emit and writing the assembly to disk:

一紙繁鸢 2024-11-18 17:37:45

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

While System.Reflection.Emit let's you do code gen it's the oldest of the code gen APIs in the .NET framework and it requires understanding of IL. The expression trees introduced in .NET 3.5 and extended in .NET 4.0 (can't create new types) but they can be used to assemble complete method bodies.

离旧人 2024-11-18 17:37:45

Reflection.Emit通常很好,但是如果您生成的程序集是IKVM.Reflection.Emit(可从 Mono 获得),则可能有更多选项不适用于同一平台(即您想从编译器构建 silverlight dll,它是用“完整”.NET 编写的)。

Reflection.Emit is generally fine, but IKVM.Reflection.Emit (available from Mono) may have more options if the assembly you are generating is not for the same platform (i.e. you want to build a silverlight dll from your compiler, which is written in "full" .NET).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文