【问题标题】:Do the .NET compilers (e.g. csc.exe, vbc.exe) use Reflection.Emit()?.NET 编译器(例如 csc.exe、vbc.exe)是否使用 Reflection.Emit()?
【发布时间】:2011-03-28 00:44:26
【问题描述】:

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

他们:

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

【问题讨论】:

  • 为什么不使用Reflector来查找?
  • @John MS C# 编译器不是用 CIL 编写的。我知道 MS C# 编译器是 C++,但他们实际上正在用托管代码重写它。而且因为它不是用 .Net/CIL 语言编写的,所以我猜它不能使用 Reflection.Emit
  • @John Saunders - 这是我的第一步 - 这就是我发现 csc.exe(C# 编译器)不是托管代码的方式。

标签: .net compiler-construction


【解决方案1】:

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

F# 编译器是用托管代码编写的。它使用自己的 IL 编写器后端来输出 IL 程序集。然而,F# 编译器也支持在 F# Interactive(F# 的 REPL)中使用的 Reflection.Emit 后端。

IronPython 和 IronRuby 编译器在某种程度上使用了 Reflection.Emit。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多