Compartilhar via


Visão geral de metadados

Os metadados são usados para descrever o tempo de execução tipos (classes, interfaces e tipos de valor), campos e métodos, bem como informações internas de implementação e o layout usado pelo common language runtime (CLR). O runtime usa metadados para compilação JIT Microsoft intermediate language (MSIL), classes de carga, executar o código e interoperar com o mundo COM clássico ou nativo. Os metadados é incluído com cada componente do CLR e estão disponível para o tempo de execução, ferramentas e serviços.

Esta visão geral contém as seções a seguir:

  • O API de metadados

  • Comparação com os serviços de reflexão

  • Escopo

  • Verificação de erros

  • Tópicos relacionados

O API de metadados

Toda a manipulação de metadados é realizada por meio do API, que isola a um cliente (ferramentas e serviços) de metadados de estruturas de dados subjacentes. Os metadados API fornecem um formato de persistência conectável que permite representações binárias do tempo de execução, bibliotecas de tipo clássico COM e outros formatos a serem transferidos para ou de memória transparente.

Os metadados API inclui interfaces emitem (isto é, gerar) e importar metadados. Um cliente pode emitir ou importar os metadados das seguintes maneiras:

  • Compiladores e ferramentas emitem metadados chamando a APIs de emitir. Metadados é emitido durante a compilação e o processo de vinculação. As ferramentas RAD emitem metadados como parte da criação de aplicativos ou componentes. Os membros do API gravar e ler a partir de estruturas de dados na memória. Ao poupar tempo, essas estruturas de memória são compactadas e mantidas em formato binário para a unidade de compilação de destino (arquivo. obj), arquivo executável (. exe) ou arquivo binário de metadados de autônomo. Quando várias unidades de compilação são vinculadas para formar um EXE ou DLL, os membros do API emitir fornecem um método para mesclar as seções de metadados de cada unidade de compilação de um arquivo binário do único metadados integrados.

  • O carregador e outros serviços e ferramentas de tempo de execução importar metadados chamando-se membros do API para obter informações sobre os componentes para tarefas como, por exemplo, carregamento e ativação podem ser concluídas.

Voltar ao topo

Comparação com os serviços de reflexão

Os metadados API permite que os metadados do componente a ser acessado sem a necessidade de classe a ser carregado pelo runtime. A API foi projetada especificamente para maximizar o desempenho e minimizar a sobrecarga. O mecanismo de metadados disponibiliza os dados, mas pára de fornecer acesso direto às estruturas de dados na memória. Por outro lado, quando uma classe é carregada em tempo de execução, o carregador importa os metadados em suas próprias estruturas de dados, você pode navegar através dos serviços de reflexão do runtime.

Os serviços de reflexão fazem muito mais trabalho que a API de metadados. Por exemplo, eles automaticamente percorrer a hierarquia de herança para obter informações sobre campos e métodos herdados. Os metadados API retorna somente o membro direto declarações para uma determinada classe e requer que o cliente da API fazer chamadas adicionais para percorrer a hierarquia e enumerar os métodos herdados. A abordagem de serviços de reflexão expõe um modo de exibição de nível mais alto de metadados, enquanto que a abordagem da API de metadados coloca o cliente API de controle total de percorrer as estruturas de dados.

Voltar ao topo

Escopo

Em qualquer momento, você pode ter várias áreas distintas de memória que contêm metadados. Por exemplo, você pode ter uma área que mapeia todos os metadados de um módulo existente no disco. Ao mesmo tempo, você pode emitir o metadados em uma área separada que você mais tarde será salva como um módulo em um arquivo.

Observação

A palavra módulo de aqui significa um arquivo que contém metadados.Geralmente será um. obj,. exe ou arquivo. dll que contém metadados e o código Microsoft intermediate language (MSIL), mas também pode ser um arquivo que contém apenas os metadados.

Cada área separada de metadados na memória é conhecida como um escopo. Cada escopo corresponde a um módulo. Módulos geralmente são salvos como arquivos no disco, mas isso não é necessário. Por exemplo, ferramentas de script geram freqüentemente os metadados nunca é mantido em um arquivo.

O escopo do termo é usado porque representa a região dentro do qual os tokens de metadados são definidos. Por exemplo, um token de metadados com o valor n identifica os detalhes sobre uma definição de classe dentro de um determinado escopo. No entanto, um token de metadados com o mesmo valor de n pode corresponder a um conjunto totalmente diferente de detalhes para um escopo diferente.

Para estabelecer um escopo de metadados na memória, você chamar o CComPtrBase::CoCreateInstance método de IMetaDataDispenser interface. Esse método cria um novo escopo ou abre um conjunto de estruturas de metadados existentes a partir de um arquivo ou a memória local. Com cada chamada para o IMetaDataDispenser::DefineScope ou IMetaDataDispenser::OpenScope método, o chamador especificar qual API para receber:

  • O IMetaDataEmit interface habilita ferramentas gravar em um escopo de metadados.

  • O IMetaDataImport interface permite que ferramentas para ler de um escopo de metadados.

Voltar ao topo

Verificação de erros

Os metadados API realiza um mínimo de verificação de erros semânticos. Os métodos da API de metadados supor que as ferramentas e serviços que emitem metadados impor as regras de sistema do objeto são descritas no common type system e que qualquer adicionais de verificação pelo mecanismo de metadados durante o tempo de desenvolvimento é supérfluo.

Voltar ao topo

Tópicos relacionados

Título

Descrição

Símbolos de Metadados

Fornece informações sobre os tokens de metadados, que são usados para identificar as abstrações e explica como eles são usados com a API de metadados.

Convenções de codificação para a API de metadados

Descreve as convenções de codificação são usadas pelos metadados API.

Interfaces de metadados

Descreve as interfaces não gerenciadas que fornecem acesso aos metadados expostos pelo.NET Framework tipos, métodos, campos e assim por diante.

Metadados globais funções estáticas

Descreve as funções estáticas globais de não gerenciadas que usa a API de metadados.

Enumerações de metadados

Descreve as enumerações não gerenciadas que usa a API de metadados.

Estruturas de metadados

Descreve as estruturas de não gerenciadas que usa a API de metadados.

Uniões de metadados

Descreve as uniões não gerenciadas que usa a API de metadados.

Voltar ao topo