Vue d'ensemble des métadonnées

Les métadonnées sont utilisées pour décrire des types au moment de l'exécution (classes, interfaces et types valeur), des champs et des méthodes, ainsi que l'implémentation interne et les informations relatives à la disposition qui sont utilisées par le Common Language Runtime (CLR). Le runtime utilise des métadonnées pour compiler juste-à-temps (JIT, Just-In-Time) le langage MSIL, charger des classes, exécuter du code et interagir avec le monde COM natif ou classique. Les métadonnées sont incluses avec chaque composant CLR et sont disponibles pour le runtime, les outils et les services.

Cette vue d'ensemble contient les sections suivantes :

  • API de métadonnées

  • Comparaison avec les services de réflexion

  • Portée

  • Vérification des erreurs

  • Rubriques connexes

API de métadonnées

Toute la manipulation des métadonnées est exécutée via l'API de métadonnées, qui isole un client (outils et services) des structures de données sous-jacentes. L'API des métadonnées fournit un format de persistance enfichable qui permet aux représentations binaires du runtime, aux bibliothèques de types classiques COM et aux autres formats d'être transférés de façon transparente vers ou depuis la mémoire.

L'API de métadonnées inclut des interfaces qui émettent (génèrent) et importent des métadonnées. Un client peut émettre ou importer des métadonnées comme suit :

  • Les compilateurs et les outils émettent des métadonnées en appelant les API d'émission. Les métadonnées sont émises pendant le processus de compilation et de liaison. Les outils RAD émettent des métadonnées pendant la génération de composants ou d'applications. Les membres API écrivent et lisent dans les structures de données en mémoire. Lors de l'enregistrement, ces structures en mémoire sont compressées et rendues persistantes au format binaire dans l'unité de compilation cible (fichier .obj), le fichier exécutable (.exe) ou le fichier binaire de métadonnées autonome. Lorsque plusieurs unités de compilation sont liées pour former un exécutable ou une DLL, les membres API d'émission fournissent une méthode permettant de fusionner les sections de métadonnées de chaque unité de compilation dans un seul fichier binaire de métadonnées intégré.

  • Le chargeur et les autres outils et services du runtime importent les métadonnées en appelant les membres API d'importation pour obtenir des informations sur les composants afin que les tâches telles que le chargement et l'activation puissent être exécutées.

Retour au début

Comparaison avec les services de réflexion

L'API de métadonnées permet d'accéder aux métadonnées d'un composant sans que la classe soit chargée par le runtime. L'API est conçue spécifiquement pour augmenter les performances et réduire la charge mémoire. Le moteur de métadonnées rend les données disponibles mais bloque l'accès direct aux structures de données en mémoire. À l'inverse, lorsqu'une classe est chargée au moment de l'exécution, le chargeur importe les métadonnées dans ses propres structures de données, que vous pouvez parcourir à l'aide des services de réflexion du runtime.

Les services de réflexion exécutent beaucoup plus de tâches que l'API de métadonnées. Ainsi, ils parcourent par exemple la hiérarchie d'héritage pour obtenir des informations sur les méthodes et les champs hérités. L'API de métadonnées retourne uniquement les déclarations de membre directes pour une classe donnée et requiert que le client API effectue des appels supplémentaires pour parcourir la hiérarchie et énumérer les méthodes héritées. L'approche des services de réflexion propose un affichage de niveau supérieur des métadonnées, tandis que l'approche des API de métadonnées abandonne au client API le contrôle complet du parcours des structures de données.

Retour au début

Portée

À un moment donné, plusieurs zones de mémoire distinctes peuvent contenir des métadonnées. Par exemple, vous pouvez avoir une zone qui mappe toutes les métadonnées à partir d'un module existant sur le disque. Dans le même temps, vous pouvez émettre des métadonnées dans une zone séparée que vous enregistrerez ultérieurement comme un module dans un fichier.

RemarqueRemarque

Le terme module désigne ici un fichier contenant des métadonnées.En général, il s'agit d'un fichier .obj, .exe ou .dll qui contient des métadonnées et du code MSIL (Microsoft Intermediate Language), mais il peut également s'agir d'un fichier qui contient uniquement des métadonnées.

Chaque zone séparée de métadonnées en mémoire est appelée portée. Chaque portée correspond à un module. Les modules sont souvent enregistrés en tant que fichiers sur le disque, mais cela n'est pas obligatoire. Par exemple, les outils de script génèrent fréquemment des métadonnées qui ne sont jamais rendues persistantes dans un fichier.

Le terme « portée » est utilisé car il représente la région dans laquelle les jetons de métadonnées sont définis. Par exemple, un jeton de métadonnées avec la valeur N identifie des détails concernant une définition de classe, dans une portée donnée. Cependant, un jeton de métadonnées avec la même valeur N peut correspondre à un ensemble de détails complètement différent pour une portée différente.

Pour établir une portée de métadonnées en mémoire, appelez la méthode CComPtrBase::CoCreateInstance de l'interface IMetaDataDispenser. Cette méthode crée une portée ou ouvre un jeu existant de structures de métadonnées dans un fichier ou un emplacement de mémoire. Avec chaque appel à la méthode IMetaDataDispenser::DefineScope ou IMetaDataDispenser::OpenScope, l'appelant spécifie quelle API recevoir :

  • L'interface IMetaDataEmit autorise les outils à écrire dans une portée de métadonnées.

  • L'interface IMetaDataImport autorise les outils à lire dans une portée de métadonnées.

Retour au début

Vérification des erreurs

L'API de métadonnées exécute une vérification des erreurs de sémantique minimale. Les méthodes API de métadonnées supposent que les outils et les services émettant des métadonnées appliquent les règles du système d'objet indiquées dans le système de type commun (CTS, Common Type System), et que toute vérification supplémentaire par le moteur de métadonnées au moment du développement est superflue.

Retour au début

Rubriques connexes

Titre

Description

Jetons de métadonnées

Fournit des informations sur les jetons de métadonnées, qui sont utilisés pour identifier des abstractions, et explique comment ils sont utilisés avec l'API de métadonnées.

Conventions de codage pour l'API de métadonnées

Décrit les conventions de codage qui sont utilisées par l'API de métadonnées.

Interfaces de métadonnées

Décrit les interfaces non managées qui fournissent l'accès aux métadonnées exposées par les types, les méthodes, les champs du .Net Framework, et ainsi de suite.

Fonctions statiques globales des métadonnées

Décrit les fonctions statiques globales non managées qui sont utilisées par l'API de métadonnées.

Énumérations de métadonnées

Décrit les énumérations non managées que l'API des métadonnées utilise.

Structures de métadonnées

Décrit les structures non managées que l'API des métadonnées utilise.

Unions de métadonnées

Décrit les unions non managées que l'API des métadonnées utilise.

Retour au début