|Important||This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer|
Emitting Dynamic Methods and Assemblies
This section describes a set of managed types in the System.Reflection.Emit namespace that allow a compiler or tool to emit metadata and Microsoft intermediate language (MSIL) at run time and optionally generate a portable executable (PE) file on disk. Script engines and compilers are the primary users of this namespace. In this section, the functionality provided by the System.Reflection.Emit namespace is referred to as reflection emit.
Reflection emit provides the capabilities:
Define lightweight global methods at run time, using the DynamicMethod class, and execute them using delegates.
Define assemblies at run time and then run them and/or save them to disk.
Define modules in new assemblies at run time and then run and/or save them to disk.
Define types in modules at run time, create instances of these types, and invoke their methods.
Define symbolic information for defined modules that can be used by tools such as debuggers and code profilers.
In addition to the managed types in the System.Reflection.Emit namespace, there are unmanaged metadata interfaces which are described in the Metadata Interfaces reference documentation. Managed reflection emit provides stronger semantic error checking and a higher level of abstraction of the metadata than the unmanaged metadata interfaces.
Another useful resource for working with metadata and MSIL is the Common Language Infrastructure (CLI) documentation, especially "Partition II: Metadata Definition and Semantics" and "Partition III: CIL Instruction Set". The documentation is available online on MSDN and at the Ecma Web site.