reflexão Emit exemplo de tecnologia
Este exemplo demonstra como usar a reflexão emitir.Emissão de reflexão é um recurso de time de execução que permite que o código criar assemblies dinâmicos, módulos e tipos.Dinamicamente, você pode criar instâncias desses tipos de usar, ou pode usar reflexão emitir para gerar um assembly e persistir para disco sistema autônomo um arquivo executável ou DLL.Este exemplo consiste em dois executáveis.O primeiro executável, EmitAssembly.exe, gera um tipo dinâmico e testa, ou ele gera um tipo dinâmico e persiste para disco sistema autônomo uma DLL.O segundo executável, TestEmittedAssembly.exe, simplesmente testa o assembly dinamicamente emitido pela EmitAssembly.exe.O tipo emitido por EmitAssembly.exe é uma classe simples denominada "HelloWorld" cujo construtor utiliza um parâmetro de cadeia de caracteres única.O tipo também implementa um método GetGreeting() que retorna a seqüência de caracteres passada para o construtor de instância.
Para obter informações sobre como usar os exemplos, consulte os tópicos a seguir:
Para compilação a amostra usando o aviso de comando
Abrir um janela do aviso de comando e navegar até um de subpastas específicas do linguagem para a amostra.
Tipo de MSBuild ReflectionEmitCS.sln or MSBuild ReflectionEmitVB.sln, dependendo de sua escolha de linguagem, na linha de comando de programação.
Compilar o assembly de teste por compilar a classe EmitAssembly.Dependendo de sua escolha de linguagem de programação, digite CSC /destino:biblioteca EmitAssembly.cs or vbc /destino:biblioteca TestEmittedAssembly.vb na linha de comando.O arquivo de saída resultante será EmitAssembly.dll.
Para compilação a amostra usando o Visual Studio
em aberto Windows Explorer e navegar até um de subpastas específicas do linguagem para a amostra.
clicar duas vezes no ícone para ReflectionEmitCS.sln ou ReflectionEmitVB.sln, dependendo de sua escolha de linguagem, de programação para em em aberto o arquivo no Visual Studio.
No Compilação menu, selecionar Criar solução.
compilação o assembly de teste por compilação ing classe EmitAssembly.Criar um biblioteca de classesprojeto usando o arquivo EmitAssembly.cs ou EmitAssembly.vb e compilação do projeto.O arquivo de saída resultante será EmitAssembly.dll.
Para executar este exemplo
Aberto o janela do aviso de comando e navegar até o diretório que contém o executável de novo.
Tipo de EmitAssembly.exe, seguido pelo valor que você deseja passar sistema autônomo um parâmetro na linha de comando.
Observação: |
---|
O exemplo cria um aplicativo de console.Tem de inicialização e executá-la em uma janela do aviso de comando para exibir sua saída. |
Comentários
Para obter mais informações sobre reflexão emitir, consulte os comentários em arquivos de código-fonte.
Observação: |
---|
A ferramenta MsBuild cria dois arquivos executável: EmitAssembly.exe e TestEmittedAssembly.exe.No entanto, para compilação TestEmittedAssembly.exe, o compilador precisa ser capaz de em aberto o assembly mencionado "EmittedAssembly.dll".Depois de criar EmitAssembly.exe, a ferramenta MsBuild executa EmitAssembly com o parâmetro de linha de comando "2" que indica que a amostra deve emitir o assembly dinâmico. |
O executável EmitAssembly aceita um parâmetro de linha de comando, indicando que você teste deseja executar.Um valor 1 faz com que o exemplo para emitir o tipo dinâmico no seu AppDomain e teste os membros estático na amostra.Um valor 2 faz com que o exemplo de emitir o tipo dinâmico em um assembly e manter o conjunto do disco na forma de uma .dll e um arquivo .MOD.Depois de fazer isso, convém executar TestEmittedAssembly.exe ou ILDasm.exe para testar o código emitido.
Por exemplo:
TestEmittedAssembly.exe
ILDasm EmittedModule.mod
Um valor de 3 faz com que o exemplo de emitir o tipo dinâmico em um assembly e emitir um segundo tipo dinâmico que testa o código do tipo dinâmico primeiro.
O exemplo utiliza as tecnologias e classes a seguir:
AppDomain O exemplo usa o AppDomain tipo para criar um assembly dinâmico do exemplo AppDomain. Ele faz isso chamando o DefineDynamicAssembly método.
AssemblyBuilder Usado para compilação um assembly dinâmico. Ele pode ser usado para criar um assembly para uso imediato ou um assembly dinâmico pode ser mantido em um arquivo DLL ou EXE.
AssemblyNameUsado para definir a identidade exclusiva de um assembly.O exemplo usa este tipo da forma mais simples possível, fornecendo o nome de texto "EmittedAssembly" assembly dinâmico.
ModuleBuilderUsado para compilação módulo dinâmico no conjunto de módulos (assembly) dinâmico.
TypeBuilder Usado para compilação um tipo de forma dinâmica. Esse tipo é derivado de Type. Dela, você pode solicitar instâncias do FieldBuilder, ConstructorBuilder, e MethodBuilder tipos. O exemplo usando esses tipos gera um tipo de total.
FieldBuilder Usado para criar um campo em um tipo dinâmico.
ConstructorBuilder Usado para definir um construtor em um tipo dinâmico.
MethodBuilderUsado para definir um método em um tipo dinâmico.
ILGenerator Ambos MethodBuilder e ConstructorBuilder implementar o GetILGenerator método. Esses métodos retornam uma instância do ILGenerator tipo, que é usado para gerar código MSIL (Microsoft Intermediate linguagem) dinamicamente para um tipo.
Thread Usado para obter uma instância da AppDomain tipo para o segmento corrente.
Consulte também
Referência
Outros recursos
Emitindo Métodos Dinâmicos e Assemblies
Geração e compilação dinâmicas de código fonte