.net 在磁盘和内存中生成CIL字节码

.net 在磁盘和内存中生成CIL字节码,.net,compiler-construction,roslyn,cil,mono.cecil,.net,Compiler Construction,Roslyn,Cil,Mono.cecil,我正在编写一个针对CIL(.Net)字节码的编译器。对于实际生成字节码的部分,我可以从头开始编写,但如果可能的话,使用现有库会很方便 我需要能够在磁盘(通常的静态编译)和内存(运行时代码生成)中生成字节码。还有查找现有程序集的能力,至少能够解析引用 据我所知,有三个API至少在这方面做了一些事情,但目前还不清楚它们是否确实做了所需的工作: 反思。这显然能够在内存中生成字节码。它是否包括生成磁盘完整程序集的方法 塞西尔。我觉得这样合适吗?他们的更新页面上写着“对于这个测试版,我们已经与Mono团

我正在编写一个针对CIL(.Net)字节码的编译器。对于实际生成字节码的部分,我可以从头开始编写,但如果可能的话,使用现有库会很方便

我需要能够在磁盘(通常的静态编译)和内存(运行时代码生成)中生成字节码。还有查找现有程序集的能力,至少能够解析引用

据我所知,有三个API至少在这方面做了一些事情,但目前还不清楚它们是否确实做了所需的工作:

  • 反思。这显然能够在内存中生成字节码。它是否包括生成磁盘完整程序集的方法

  • 塞西尔。我觉得这样合适吗?他们的更新页面上写着“对于这个测试版,我们已经与Mono团队合作,在他们迁移到Roslyn和便携式PDB时支持他们的需求。”这是否意味着Cecil现在被Roslyn取代,或者它现在与Roslyn合作

  • 罗斯林。据推测,它必须能够向磁盘生成字节码。它是否能够在运行时在内存中生成字节码


现在推荐的解决方案是什么?

是、是和是。它们都可以以内存和磁盘为目标

所有这些都是具有不同能力和不同目的的备选方案。如果您正在为自己选择的语言编写编译器,则只需
ILGenerator
。如果您想编译成例如C,然后再编译成IL,请使用Roslyn。Cecil为您提供了一些额外的工具,但它最大的优势是能够动态修改(和反编译)现有代码——对于某些工具来说很方便,但对于您的用例来说可能不方便