Compartir a través de


Información general sobre metadatos

Los metadatos se usan para describir tipos en tiempo de ejecución (clases, interfaces y tipos de valor), campos y métodos, así como la implementación interna e información de diseño empleadas por Common Language Runtime (CLR). El motor en tiempo de ejecución usa los metadatos para realizar la compilación JIT del lenguaje intermedio de Microsoft (MSIL), cargar clases, ejecutar código e interoperar con el mundo COM clásico o nativo. Los metadatos se incluyen con cada componente de CLR y están disponibles para el motor en tiempo de ejecución, las herramientas y los servicios.

Esta información general contiene las siguientes secciones:

  • La API de metadatos

  • Comparación con los servicios de reflexión

  • Ámbito

  • Comprobación de errores

  • Temas relacionados

La API de metadatos

Toda la manipulación de metadatos se realiza a través de la API de metadatos, que aisla un cliente (herramientas y servicios) de las estructuras de datos subyacentes. La API de metadatos proporciona un formato de persistencia conectable que permite transferir a o desde la memoria las representaciones binarias en tiempo de ejecución, bibliotecas de tipos clásicas COM y otros formatos de forma transparente.

La API de metadatos incluye interfaces que emiten (es decir, generan) e importan metadatos. Un cliente puede emitir o importar metadatos de las maneras siguientes:

  • Los compiladores y las herramientas emiten metadatos mediante llamadas a las API de emisión. Los metadatos se emiten durante el proceso de compilación y vinculación. Las herramientas RAD emiten metadatos como una parte de la compilación de componentes o aplicaciones. Los miembros de la API escriben y leen las estructuras de datos en memoria. En el momento de guardar, estas estructuras en memoria se comprimen y se conservan en formato binario en la unidad de compilación de destino (archivo .obj), en un archivo ejecutable (archivo .exe) o en un archivo binario de metadatos independiente. Cuando se vinculan varias unidades de compilación para formar un archivo EXE o DLL, los miembros de la API de emisión proporcionan un método para combinar las secciones de metadatos de cada unidad de compilación en un único archivo binario de metadatos integrado.

  • El cargador y otras herramientas y servicios en tiempo de ejecución importan metadatos mediante llamadas a los miembros de la API para obtener información acerca de los componentes de manera que se puedan completar tareas tales como la carga y la activación.

Volver al principio

Comparación con los servicios de reflexión

La API de metadatos permite obtener acceso a los metadatos de un componente sin que el motor en tiempo de ejecución tenga que cargar la clase. La API está diseñada específicamente para maximizar el rendimiento y minimizar las sobrecargas. El motor de metadatos hace que los datos estén disponibles pero no permite proporcionar acceso directo a las estructuras de datos de la memoria. Por el contrario, cuando se carga una clase en tiempo de ejecución, el cargador importa los metadatos a sus propias estructuras de datos, que se pueden examinar mediante los servicios de reflexión del motor en tiempo de ejecución.

Los servicios de reflexión hacen mucho más trabajo que las API de metadatos. Por ejemplo, recorrer automáticamente la jerarquía de herencia para obtener información sobre los métodos y campos heredados. La API de metadatos devuelve sólo las declaraciones de miembros directos para una clase determinada y requiere que el cliente de API realice llamadas adicionales para recorrer la jerarquía y enumerar los métodos heredados. El sistema de los servicios de reflexión expone una vista de nivel superior de los metadatos, mientras que el sistema de la API de metadatos deja que el cliente de API se encargue de recorrer las estructuras de datos.

Volver al principio

Ámbito

En un momento dado, puede haber varias áreas de memoria que contengan metadatos. Por ejemplo, puede haber un área que asigne todos los metadatos de un módulo existente en el disco. Al mismo tiempo, pueden estar emitiéndose metadatos en otra área independiente que más adelante se guardará como un módulo en un archivo.

NotaNota

En este contexto, la palabra módulo hace referencia a un archivo que contiene metadatos.Normalmente será un archivo .obj, .exe o .dll que contenga metadatos y código de lenguaje intermedio de Microsoft (MSIL), pero también puede ser un archivo que sólo contenga metadatos.

Cada área de metadatos en memoria se conoce como ámbito. Cada ámbito corresponde a un módulo. A menudo, los módulos se guardan como archivos en disco, pero no es obligatorio. Por ejemplo, las herramientas de scripting con frecuencia generan metadatos que nunca se conservan en un archivo.

Se utiliza el término ámbito porque representa la región en la que se definen los tokens de metadatos. Por ejemplo, un token de metadatos con el valor N identifica los detalles de una definición de clase, dentro de un ámbito determinado. Sin embargo, un token de metadatos con el mismo valor N puede corresponder a un conjunto de detalles totalmente diferente para un ámbito diferente.

Para establecer un ámbito de metadatos en memoria, se ha de llamar al método CComPtrBase::CoCreateInstance de la interfaz IMetaDataDispenser. Este método crea un ámbito nuevo o abre un conjunto existente de estructuras de metadatos desde una ubicación en memoria o archivo. Con cada llamada al método IMetaDataDispenser::DefineScope o IMetaDataDispenser::OpenScope, el llamador especifica qué API se va a recibir:

  • La interfaz IMetaDataEmit permite que las herramientas escriban en un ámbito de metadatos.

  • La interfaz IMetaDataEmit permite que las herramientas lean en un ámbito de metadatos.

Volver al principio

Comprobación de errores

La API de metadatos realiza una comprobación mínima de errores semánticos. Los métodos de la API de metadatos suponen que las herramientas y los servicios que emiten metadatos exigen las reglas del sistema de objetos que se describen en el sistema de tipos común, y que cualquier comprobación adicional por parte del motor de metadatos en tiempo de desarrollo es superflua.

Volver al principio

Temas relacionados

Título

Descripción

Tokens de metadatos

Proporciona información sobre los tokens de metadatos, que se usan para identificar abstracciones, y explica cómo se emplean con la API de metadatos.

Convenciones de codificación para API de metadatos

Describe las convenciones de codificación que utiliza la API de metadatos.

Interfaces de metadatos

Describe las interfaces no administradas que proporcionan acceso a los metadatos expuestos por los tipos, métodos, campos, etc. de .NET Framework.

Funciones estáticas globales para metadatos

Describe las funciones estáticas globales no administradas que utiliza la API de metadatos.

Enumeraciones para metadatos

Describe las enumeraciones no administradas que utiliza la API de metadatos.

Estructuras de metadatos

Describe las estructuras no administradas que utiliza la API de metadatos.

Uniones de metadatos

Describe las uniones no administradas que utiliza la API de metadatos.

Volver al principio