Freigeben über


Übersicht über Metadaten

Metadaten werden verwendet, um Laufzeittypen (Klassen, Schnittstellen und Werttypen), Felder und Methoden sowie die interne Implementierung und Layoutinformationen zu beschreiben, die von der Common Language Runtime (CLR) verwendet werden. Die Laufzeit verwendet Metadaten für die JIT-Kompilierung der Microsoft Intermediate Language (MSIL), zum Laden von Klassen, Ausführen von Code und für die Zusammenarbeit mit der klassischen oder systemeigenen COM-Umgebung. Die Metadaten sind in jeder CLR-Komponente enthalten und stehen der Laufzeit, den Tools und Diensten zur Verfügung.

Diese Übersicht enthält folgende Abschnitte:

  • Die Metadaten-API

  • Vergleich mit Reflektionsdiensten

  • Umfang

  • Fehlerüberprüfung

  • Verwandte Themen

Die Metadaten-API

Alle Manipulationen an den Metadaten werden durch die Metadaten-API ausgeführt, die einen Client (Tools und Dienste) von den zugrunde liegenden Datenstrukturen isoliert. Die Metadaten-API stellt ein austauschbares persistentes Format bereit, mit dem Laufzeitbinärdarstellungen, klassische COM-Typbibliotheken und andere Formate transparent in oder aus dem Arbeitsspeicher übertragen werden können.

Die Metadaten-API beinhaltet Schnittstellen, die Metadaten ausgeben (d. h. generieren) und importieren. Ein Client kann Metadaten folgendermaßen ausgeben oder importieren:

  • Compiler und Tools geben Metadaten aus, indem sie die Ausgabe-APIs aufrufen. Metadaten werden während der Kompilierung und des Verknüpfungsvorgangs ausgegeben. RAD-Tools geben Metadaten als Teil der Erstellung von Komponenten oder Anwendungen aus. Die API-Member schreiben und lesen in den speicherresidenten Datenstrukturen. Beim Speichern werden diese speicherresidenten Strukturen komprimiert und im Binärformat in der Zielkompilierungseinheit (OBJ-Datei), ausführbaren Datei (EXE-Datei) oder in der eigenständigen binären Metadatendatei beibehalten. Wenn mehrere Kompilierungseinheiten verknüpft werden, um eine EXE oder DLL zu bilden, stellen die Ausgabe-API-Member eine Methode bereit, mit der die Metadatenabschnitte der einzelnen Kompilierungseinheiten in einer einzigen, integrierten binären Metadatendatei zusammengeführt werden.

  • Das Ladeprogramm und andere Laufzeittools und -dienste importieren Metadaten durch das Aufrufen von API-Membern, um Informationen über Komponenten zu erhalten. Auf diese Weise können Aufgaben wie Laden und Aktivieren abgeschlossen werden.

Zurück nach oben

Vergleich mit Reflektionsdiensten

Die Metadaten-API ermöglicht den Zugriff auf die Metadaten einer Komponente, ohne dass die Klasse von der Laufzeit 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 eine Klasse hingegen 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.

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.

Zurück nach oben

Umfang

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.

HinweisHinweis

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.

Zurück nach oben

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.

Zurück nach oben

Verwandte Themen

Titel

Beschreibung

Metadatentokens

Stellt Informationen über Metadatentoken bereit, die verwendet werden, um Abstraktionen zu identifizieren, und erläutert, wie sie mit der Metadaten-API verwendet werden.

Codierungskonventionen für Metadaten-API

Beschreibt die Codierungskonventionen, die von der Metadaten-API verwendet werden.

Metadatenschnittstellen

Beschreibt die nicht verwalteten Schnittstellen, die Zugriff auf die Metadaten bereitstellen, die von Typen, Methoden, Feldern usw. in .Net Framework verfügbar gemacht werden.

Globale statische Metadatenfunktionen

Beschreibt die nicht verwalteten globalen statischen Funktionen, die die Metadaten-API verwendet.

Metadatenenumerationen

Beschreibt die nicht verwalteten Enumerationen, die die Metadaten-API verwendet.

Metadatenstrukturen

Beschreibt die nicht verwalteten Strukturen, die die Metadaten-API verwendet.

Metadaten-Unions

Beschreibt die nicht verwalteten Unions, die die Metadaten-API verwendet.

Zurück nach oben