Freigeben über


Übersicht über die Metadaten-API

Aktualisiert: November 2007

Die Metadaten-API der Common Language Runtime (CLR) ermöglicht den Zugriff auf die Metadaten einer Komponente, ohne dass die Klasse von der CLR geladen werden muss. Die API wurde insbesondere im Hinblick auf eine Optimierung der Leistung und eine Minimierung des Verwaltungsaufwands entwickelt. Das Metadatenmodul macht die Daten verfügbar, der direkte Zugriff auf die speicherresidenten Datenstrukturen ist jedoch nicht möglich. Wenn hingegen eine Klasse zur Laufzeit geladen wird, importiert das Ladeprogramm die Metadaten in seine eigenen Datenstrukturen, die mit den Reflektionsdiensten der Common Language Runtime durchsucht werden können.

Metadaten-API oder Reflektionsdienste

Die Reflektionsdienste übernehmen deutlich mehr Aufgaben als die Metadaten-API. Sie durchlaufen beispielsweise automatisch die Vererbungshierarchie, um Informationen über geerbte Methoden und Felder abzurufen. Die Metadaten-API gibt nur direkte Memberdeklarationen für eine angegebene Klasse zurück, und der API-Client muss zusätzliche Aufrufe durchführen, um die Hierarchie zu durchlaufen und die geerbten Methoden aufzulisten. Die Reflektionsdienste machen eine Ansicht der Metadaten auf höherer Ebene verfügbar, während bei den Metadaten-APIs der API-Client die vollständige Kontrolle über das Durchlaufen der Datenstrukturen erhält.

Bereich

Zu jedem Zeitpunkt kann es mehrere verschiedene Bereiche des Arbeitsspeichers geben, die Metadaten enthalten. Beispielsweise könnte ein Bereich alle Metadaten eines vorhandenen Moduls auf einem Datenträger zuordnen. Gleichzeitig können Sie Metadaten in einen separaten Bereich ausgeben, den Sie später als Modul in einer Datei speichern.

Tipp

Das Wort Modul weist hier auf eine Datei hin, die Metadaten enthält. In der Regel ist dies eine OBJ-Datei, eine EXE-Datei oder eine DLL-Datei, die Metadaten und MSIL-Codes (Microsoft Intermediate Language) enthält. Es kann aber auch eine Datei sein, die nur Metadaten enthält.

Jeder Einzelbereich der Metadaten im Arbeitsspeicher wird als Bereich bezeichnet. Jeder Bereich entspricht einem Modul. Module werden oft als Dateien auf einem Datenträger gespeichert, aber dies ist nicht erforderlich. Zum Beispiel generieren Skripttools oft Metadaten, die nie in einer Datei beibehalten werden.

Der Begriff "Bereich" wird verwendet, da er den Bereich bezeichnet, in dem Metadatentoken definiert werden. Ein Metadatentoken mit dem Wert N identifiziert zum Beispiel Details über eine Klassendefinition in einem bestimmten Bereich. Ein Metadatentoken mit demselben Wert N kann jedoch für einen anderen Bereich einem völlig anderen Detailsatz entsprechen.

Zum Festlegen eines Metadatenbereichs im Arbeitsspeicher rufen Sie die CComPtrBase::CoCreateInstance-Methode der IMetaDataDispenser-Schnittstelle auf. Diese Methode erstellt einen neuen Bereich oder öffnet einen vorhandenen Satz von Metadatenstrukturen in einer Datei oder einer Arbeitsspeicherposition. Mit jedem Aufruf der IMetaDataDispenser::DefineScope-Methode oder der IMetaDataDispenser::OpenScope-Methode gibt der Aufrufer an, welche API empfangen werden soll:

  • Die IMetaDataEmit-Schnittstelle ermöglicht Tools, in einen Metadatenbereich zu schreiben.

  • Die IMetaDataImport-Schnittstelle ermöglicht Tools, aus einem Metadatenbereich zu lesen.

Fehlerüberprüfung

Die Metadaten-API führt eine minimale semantische Fehlerüberprüfung durch. Die Metadaten-API-Methoden gehen davon aus, dass die Tools und Dienste, die Metadaten ausgeben, die im allgemeinen Typsystem beschriebenen Objektsystemregeln erzwingen und dass zusätzliche Überprüfungen durch das Metadatenmodul während der Entwicklungszeit überflüssig sind.

Siehe auch

Weitere Ressourcen

Übersicht über Metadaten