.NET编译器(例如csc.exe、vbc.exe)是否使用Reflection.Emit()?

.NET编译器(例如csc.exe、vbc.exe)是否使用Reflection.Emit()?,.net,compiler-construction,.net,Compiler Construction,我一直在使用Reflection.Emit()来构建一些程序集。我很好奇这种方法是否被发布编译器使用。编译器exe似乎不是托管代码,因此我怀疑他们正在将IL直接写入磁盘 他们是否: 使用Reflection.Emit() 使用低级文件命令写出程序集 还有别的吗 csc.exe和vb.exe都没有使用Reflection.Emit来发出托管代码,原因很明显,它们不是用托管代码编写的 F#编译器是用托管代码编写的。它使用自己的IL编写器后端输出IL程序集。不过,F#编译器也有一个反射.Emit后端

我一直在使用Reflection.Emit()来构建一些程序集。我很好奇这种方法是否被发布编译器使用。编译器exe似乎不是托管代码,因此我怀疑他们正在将IL直接写入磁盘

他们是否:

  • 使用Reflection.Emit()
  • 使用低级文件命令写出程序集
  • 还有别的吗

    • csc.exe和vb.exe都没有使用Reflection.Emit来发出托管代码,原因很明显,它们不是用托管代码编写的

      F#编译器是用托管代码编写的。它使用自己的IL编写器后端输出IL程序集。不过,F#编译器也有一个反射.Emit后端,用于F#Interactive(REPL代表F#)


      IronPython和IronRuby编译器在某种程度上使用反射.Emit。我相信。

      为什么不使用它来找出答案呢?@John The MS C#编译器不是用CIL编写的。我知道C·C编译器是C++,但是它们实际上是在托管代码中重写它。因为它不是用.Net/CIL语言编写的,所以不能使用Reflection.Emit Iguess@John桑德斯-这是我的第一步-这就是我发现csc.exe(C#编译器)不是托管代码的原因。