Emissão de métodos e assemblies dinâmicos

Esta seção descreve um conjunto de tipos gerenciados no namespace System.Reflection.Emit que permite que um compilador ou ferramenta emita metadados e a CIL (Common Intermediate Language) em tempo de execução e, opcionalmente, gere um arquivo executável portátil (PE) no disco. Mecanismos de script e compiladores são os principais usuários desse namespace. Nesta seção, a funcionalidade fornecida pelo namespace System.Reflection.Emit é conhecida como emissão de reflexão.

A emissão de reflexão fornece os seguintes recursos:

  • Defina métodos globais leves no tempo de execução usando a classe DynamicMethod e execute-os usando delegados.
  • Defina os assemblies no tempo de execução e, em seguida, execute-os e/ou salve-os em disco.
  • Defina os assemblies no tempo de execução, execute-os, descarregue-os e permita que a coleta de lixo recupere seus recursos.
  • Defina módulos em novos assemblies no tempo de execução e, em seguida, execute-os e/ou salve-os em disco.
  • Defina os tipos de módulos no tempo de execução, crie instâncias desses tipos e invoque seus métodos.
  • Identifique as informações simbólicas para módulos definidos que podem ser usadas por ferramentas como depuradores e criadores de perfil de código.

Além dos tipos gerenciados no namespace System.Reflection.Emit, há interfaces de metadados não gerenciados que são descritos na documentação de referência das Interfaces de Metadados. A emissão de reflexão gerenciada fornece verificação de erros semânticos mais potente e um nível mais alto de abstração de metadados que as interfaces de metadados não gerenciadas.

Outro recurso útil para trabalhar com metadados e CIL é a documentação da CLI (Common Language Infrastructure), especialmente a “Partição II: definição e semântica de metadados” e a “Partição III: conjunto de instruções de CIL”. A documentação está disponível online no site da Ecma.

Referência

OpCodes
Cataloga os códigos de instrução de CIL que você pode usar para criar corpos de método.

System.Reflection.Emit
Contém classes gerenciadas usadas para emitir métodos, assemblies e tipos dinâmicos.

Type
Descreve a classe Type, que representa os tipos de reflexão gerenciada e emissão de reflexão, e qual é a chave para o uso dessas tecnologias.

System.Reflection
Contém classes gerenciadas usadas para explorar os metadados e o código gerenciado.