Share via


IMetaDataEmit::MergeEnd-Methode

Führt alle Metadatenbereiche, die durch einen oder mehrere vorherige Aufrufe von IMetaDataEmit::Merge angegeben wurden, in den aktuellen Bereich zusammen.

Syntax

HRESULT MergeEnd ();

Parameter

Diese Methode nimmt zwei Parameter entgegen.

Bemerkungen

Diese Routine löst die tatsächliche Zusammenführung von Metadaten aller Importbereiche, die durch vorangehende Aufrufe von IMetaDataEmit::Merge angegeben wurden, in den aktuellen Ausgabebereich aus.

Für den Merge gelten die folgenden besonderen Bedingungen:

  • Ein Modulversionsbezeichner (MVID) wird nie importiert, da er für die Metadaten im Importbereich eindeutig ist.

  • Es werden keine vorhandenen modulweiten Eigenschaften überschrieben.

    Wenn Moduleigenschaften bereits für den aktuellen Bereich festgelegt wurden, werden keine Moduleigenschaften importiert. Wenn Moduleigenschaften jedoch nicht im aktuellen Bereich festgelegt wurden, werden sie nur einmal importiert, wenn sie zum ersten Mal angetroffen werden. Wenn diese Moduleigenschaften erneut angetroffen werden, handelt es sich um Duplikate. Wenn die Werte aller Moduleigenschaften (außer MVID) verglichen und keine Duplikate gefunden werden, wird ein Fehler ausgelöst.

  • Für Typdefinitionen (TypeDef) werden keine Duplikate in den aktuellen Bereich zusammengeführt. TypeDef-Objekte werden anhand der einzelnen vollqualifizierten Objektnamens + GUID + Versionsnummern auf Duplikate überprüft. Wenn bei Namen oder GUID eine Übereinstimmung vorhanden ist und sich eines der beiden anderen Elemente unterscheidet, wird ein Fehler ausgelöst. Wenn andernfalls alle drei Elemente übereinstimmen, führt MergeEnd eine flüchtige Überprüfung durch, um sicherzustellen, dass die Einträge tatsächlich Duplikate sind. Andernfalls wird ein Fehler ausgelöst. Bei dieser flüchtigen Überprüfung wird Folgendes gesucht:

    • Dieselben Memberdeklarationen, die in derselben Reihenfolge auftreten. Member, die als mdPrivateScope gekennzeichnet sind (siehe CorMethodAttr-Enumeration ), sind in dieser Überprüfung nicht enthalten. Sie werden speziell zusammengeführt.

    • Dasselbe Klassenlayout.

    Dies bedeutet, dass ein TypeDef-Objekt immer vollständig und konsistent in jedem Metadatenbereich definiert sein muss, in dem es deklariert wird. Wenn seine Memberimplementierungen (für eine Klasse) auf mehrere Kompilierungseinheiten verteilt sind, wird davon ausgegangen, dass die vollständige Definition in jedem Bereich und nicht inkrementell für jeden Bereich vorhanden ist. Wenn z. B. Parameternamen für den Vertrag relevant sind, müssen sie in jeden Bereich auf dieselbe Weise ausgegeben werden. Wenn sie nicht relevant sind, sollten sie nicht in Metadaten ausgegeben werden.

    Die Ausnahme ist, dass ein TypeDef-Objekt inkrementelle Member als mdPrivateScope gekennzeichnet haben kann. Wenn diese angetroffen werden, fügt MergeEnd sie inkrementell dem aktuellen Bereich hinzu, ohne Duplikate zu berücksichtigen. Da der Compiler den privaten Bereich versteht, muss der Compiler für das Erzwingen von Regeln verantwortlich sein.

  • Relative virtuelle Adressen (RVAs) werden nicht importiert oder zusammengeführt. Es wird erwartet, dass der Compiler diese Informationen erneut ausgibt.

  • Benutzerdefinierte Attribute werden nur zusammengeführt, wenn das Element, dem sie angefügt sind, zusammengeführt wird. Beispielsweise werden benutzerdefinierte Attribute, die einer Klasse zugeordnet sind, zusammengeführt, wenn die Klasse zum ersten Mal angetroffen wird. Wenn benutzerdefinierte Attribute einer TypeDef oder MemberDef zugeordnet sind, die für die Kompilierungseinheit spezifisch ist (z. B. der Zeitstempel einer Memberkompilierung), werden sie nicht zusammengeführt, und es liegt beim Compiler, diese Metadaten zu entfernen oder zu aktualisieren.

Anforderungen

Plattformen: Informationen finden Sie unter Systemanforderungen.

Header: Cor.h

Bibliothek: Als Ressource in „MSCorEE.dll“ verwendet

.NET Framework-Versionen: Seit Version 1.1 verfügbar.

Siehe auch