发出动态方法和程序集

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

反射发出具有以下功能:

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

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

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

参考文献

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

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

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

System.Reflection
包含用于探索元数据和管理代码的托管类。