发出动态方法和程序集

本节介绍 System.Reflection.Emit 命名空间中的一组托管类型,它们允许编译器或工具在运行时发出元数据和公共中间语言 (CIL),并在磁盘上生成可移植可执行 (PE) 文件(可选)。 脚本引擎和编译器是此命名空间的主要使用者。 在本节中,System.Reflection.Emit 命名空间提供的功能被称为反射发出

反射发出具有以下功能:

  • 在运行时定义轻量全局方法(使用 DynamicMethod 类)并通过委托执行这些方法。
  • 在运行时定义程序集,然后运行程序集以及/或者将程序集保存到磁盘。
  • 在运行时定义程序集,运行程序集,然后卸载程序集并允许垃圾回收回收其资源。
  • 在运行时在新的程序集中定义模块,然后运行模块以及/或者将模块保存到磁盘。
  • 在运行时在模块中定义类型,创建这些类型的实例并调用其方法。
  • 为已定义模块定义可供工具(如调试器和代码探查器)使用的符号化信息。

除了 System.Reflection.Emit 命名空间中的托管类型,还有非托管元数据接口,非托管元数据接口在元数据接口参考文档中介绍。 托管的反射发出提供比非托管元数据接口更强的语义错误检查和更高级别的元数据抽象。

元数据和 CIL 的另一个有用资源是“公共语言基础结构 (CLI)”文档,尤其是“第二部分:元数据定义和语义”和“第三部分:CIL 指令集”。 该文档可在 Ecma 网站上联机获取。

参考

OpCodes
编录可用于生成方法体的 CIL 指令代码。

System.Reflection.Emit
包含用于发出动态方法、程序集和类型的托管类。

Type
介绍 Type 类,该类代表托管反射和反射发出中的类型,它是使用这些技术的关键。

System.Reflection
包含用于浏览元数据和托管代码的托管类。