生成 CIL 字节码到磁盘和内存
Generating CIL byte code to disk and in memory
我正在编写一个针对 CIL (.Net) 字节码的编译器。对于真正生成字节码的部分,我可以从头开始写,但如果可能的话,使用现有的库会很方便。
我需要能够将字节代码生成到磁盘(对于通常的静态编译)和内存(运行时代码生成)。还有查找现有程序集的能力,至少在能够解析引用的范围内。
据我了解,有三个 API 至少可以执行这些操作,但目前尚不清楚它们是否完全符合需要:
反思。这当然似乎可以在内存中生成字节码。它是否包括将完整程序集生成到磁盘的方法?
Mono.Cecil。我认为这会合适吗?他们的更新页面说 "For this beta we’ve worked with the Mono team to support their need while they move to Roslyn and Portable PDBs." 这是否意味着 Cecil 现在已被 Roslyn 取代,或者它现在可以与 Roslyn 一起使用?
罗斯林。想必这一定有生成字节码到磁盘的能力。有没有运行时在内存中生成字节码的能力?
最近推荐的解决方案是什么?
是的,是的,是的。它们都可以同时针对内存和磁盘。
所有这些都是具有不同功能和不同目的的替代品。如果您正在为您选择的语言编写编译器,您只需要 ILGenerator
。如果你想编译成例如C# 和 then 到 IL,使用 Roslyn。 Cecil 为您提供了一些额外的工具,但它最大的优势是能够即时修改(和反编译)现有代码 - 对于某些工具来说很方便,但可能不适用于您的用例。
我正在编写一个针对 CIL (.Net) 字节码的编译器。对于真正生成字节码的部分,我可以从头开始写,但如果可能的话,使用现有的库会很方便。
我需要能够将字节代码生成到磁盘(对于通常的静态编译)和内存(运行时代码生成)。还有查找现有程序集的能力,至少在能够解析引用的范围内。
据我了解,有三个 API 至少可以执行这些操作,但目前尚不清楚它们是否完全符合需要:
反思。这当然似乎可以在内存中生成字节码。它是否包括将完整程序集生成到磁盘的方法?
Mono.Cecil。我认为这会合适吗?他们的更新页面说 "For this beta we’ve worked with the Mono team to support their need while they move to Roslyn and Portable PDBs." 这是否意味着 Cecil 现在已被 Roslyn 取代,或者它现在可以与 Roslyn 一起使用?
罗斯林。想必这一定有生成字节码到磁盘的能力。有没有运行时在内存中生成字节码的能力?
最近推荐的解决方案是什么?
是的,是的,是的。它们都可以同时针对内存和磁盘。
所有这些都是具有不同功能和不同目的的替代品。如果您正在为您选择的语言编写编译器,您只需要 ILGenerator
。如果你想编译成例如C# 和 then 到 IL,使用 Roslyn。 Cecil 为您提供了一些额外的工具,但它最大的优势是能够即时修改(和反编译)现有代码 - 对于某些工具来说很方便,但可能不适用于您的用例。