发出动态方法和程序集
本节介绍 System.Reflection.Emit 命名空间中的一组托管类型,它们允许编译器或工具在运行时发出元数据和 Microsoft 中间语言 (MSIL),或者也可以允许它们在磁盘上生成可迁移可执行 (PE) 文件。 脚本引擎和编译器是此命名空间的主要用户。 在本节中,由 System.Reflection.Emit 命名空间提供的功能称为反射发出。
反射发出提供了以下功能:
使用 DynamicMethod 类在运行时定义轻量全局方法,然后使用委托执行这些方法。
在运行时定义程序集,然后运行这些程序集并/或将它们保存到磁盘。
在运行时定义程序集,运行这些程序集,然后将它们卸载,并允许垃圾回收来回收它们的资源。
在运行时定义新程序集中的模块,然后运行这些模块并/或将它们保存到磁盘。
在运行时定义模块中的类型,创建这些类型的实例,然后调用其方法。
为定义的模块定义可由调试器和代码分析器这样的工具使用的符号信息。
除 System.Reflection.Emit 命名空间中的托管类型外,还存在 元数据接口 参考文档中介绍的非托管元数据接口。 托管反射发出比非托管元数据接口提供更强的语义错误检查和更高级别的元数据抽象化。
用于使用元数据和 MSIL 的另一种有用资源是 Common Language Infrastructure (CLI) 文档,尤其是“Partition II: Metadata Definition and Semantics”(第二部分:元数据定义和语义)和“Partition III: CIL Instruction Set”(第三部分:CIL 指令集)。 MSDN 和 Ecma Web site(Ecma 网站)上联机提供该文档。
本节内容
反射发出抽象化
列出并介绍可用于定义程序集和类型、方法和方法参数、事件、构造函数、属性等的反射发出类。动态类型生成的可回收程序集
描述动态程序集的创建和使用,当执行代码无法访问这些程序集包含的类型时,可以卸载这些程序集并让垃圾回收来回收它们。反射发出动态方法应用场景
介绍轻量动态方法的定义和用法。反射发出动态程序集应用场景
介绍发出在动态程序集中定义的动态模块的核心反射发出方案。反射发出应用程序应用场景
介绍反射发出支持的应用程序方案,包括在 Web 浏览器中执行脚本,在 ASP.NET 页中执行脚本,以及编译正则表达式。反射发出中的安全问题
介绍与使用反射发出创建动态程序集有关的安全问题。使用反射发出
介绍使用反射发出可执行的基本任务,以及有关生成轻量动态方法和发出泛型类型和方法的帮助主题。有关反射发出的更多信息
介绍与反射发出有关的其他文档。
参考
OpCodes
列出可用来生成方法体的 MSIL 指令代码。System.Reflection.Emit
包含用来发出动态方法、程序集和类型的托管类。System.Reflection
包含用于浏览元数据和托管代码的托管类。
相关章节
反射
解释如何浏览元数据和托管代码。公共语言运行时中的程序集
提供有关 .NET Framework 中的程序集的概述。