Emitindo a informação simbólica com reflexão emitir
Emissão de reflexão permite que informações simbólicas a serem definidas para um módulo dinâmico. Informações simbólicas podem ser definidas usando a interface de gravador de símbolo padrão ou um gravador símbolo especificadas pelo chamador. Emissão de reflexão fornece uma abstração de alto nível conveniente do símbolo de nível baixo interfaces gravador a System.Diagnostics.SymbolStore namespace.
O chamador deve expressar a intenção de que o módulo dinâmico conterá informação simbólica chamando o método apropriado para definir o módulo dinâmico. As diversas opções para a criação de módulos dinâmicos com informações simbólicas são descritas na a definição de módulo dinâmico. É um erro ao chamar um método de gravador de símbolo para um módulo dinâmico que não tenha sido criado com a intenção de que contém a informação simbólica.
Emissão de reflexão fornece os seguintes métodos para emitir informações simbólicas:
A interface do gravador de símbolo associada a um módulo dinâmico pode ser obtida usando o ModuleBuilder.GetSymWriter método.
O ponto de entrada do usuário para um módulo dinâmico pode ser definido usando o ModuleBuilder.SetUserEntryPoint método. O ponto de entrada do usuário é o método que o usuário tenha identificado como o ponto de entrada, em vez dos stubs gerado pelo chamador antes do método principal.
Objetos do documento são definidos usando o ModuleBuilder.DefineDocument método.
Atributos personalizados armazenados no armazenamento de símbolo são definidos para o uso de construtores, métodos e módulos de ModuleBuilder.SetSymCustomAttribute, MethodBuilder.SetSymCustomAttribute, e ConstructorBuilder.SetSymCustomAttribute métodos, respectivamente.
Pontos de seqüência são identificados usando o ILGenerator.MarkSequencePoint método.
Escopos lexicais são definidos usando o ILGenerator.BeginScope e ILGenerator.EndScope métodos.
O nome de uma variável local em um método ou um construtor pode ser definido usando o LocalBuilder.SetLocalSymInfo método. Opcionalmente, o escopo léxico da variável local pode ser especificado. A LocalBuilder objeto é obtido chamando ILGenerator.DeclareLocal.