Freigeben über


IMetaDataEmit::MergeEnd Method

Führt alle Metadatenbereiche, die von einem oder mehreren vorherigen Aufrufen von IMetaDataEmit::Merge angegeben wurden, mit dem aktuellen Bereich zusammen.

Syntax

HRESULT MergeEnd ();

Parameters

Diese Methode akzeptiert keine Parameter.

Remarks

Diese Routine löst die tatsächliche Zusammenführung von Metadaten aus, von allen Importbereichen, die durch vorangehende Aufrufe IMetaDataEmit::Mergeangegeben wurden, in den aktuellen Ausgabebereich.

Die folgenden speziellen Bedingungen gelten für den Seriendruck:

  • 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 gefunden werden. Wenn diese Moduleigenschaften erneut gefunden werden, handelt es sich um Duplikate. Wenn die Werte aller Moduleigenschaften (mit Ausnahme von MVID) verglichen werden und keine Duplikate gefunden werden, wird ein Fehler ausgelöst.

  • Für Typdefinitionen (TypeDef) werden keine Duplikate mit dem aktuellen Bereich zusammengeführt. TypeDefObjekte werden auf Duplikate für jede vollqualifizierte Objektnamen-GUID-Versionsnummer + + überprüft. Wenn eine Übereinstimmung für den Namen oder die GUID vorhanden ist und eines der anderen beiden Elemente unterschiedlich ist, wird ein Fehler ausgelöst. Andernfalls wird bei Übereinstimmungen MergeEnd aller drei Elemente eine Cursorüberprüfung zum Sicherstellen, dass die Einträge tatsächlich dupliziert sind. Andernfalls wird ein Fehler ausgelöst. Diese Cursorprüfung sucht nach:

    • Die gleichen Memberdeklarationen, die in derselben Reihenfolge ausgeführt werden. Elemente, die als mdPrivateScope " CorMethodAttr "-Aufzählung gekennzeichnet sind, sind in dieser Überprüfung nicht enthalten. Sie werden speziell zusammengeführt.

    • Das gleiche Klassenlayout.

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

    Die Ausnahme besteht darin, dass ein TypeDef Objekt inkrementelle Member als gekennzeichnet mdPrivateScopehaben kann. Bei dieser MergeEnd Begegnung werden sie inkrementell inkrementell in den aktuellen Bereich ohne Rücksicht auf Duplikate hinzugefügt. Da der Compiler den privaten Bereich versteht, muss der Compiler für die Erzwingung 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. Benutzerdefinierte Attribute, die einer Klasse zugeordnet sind, werden beispielsweise zusammengeführt, wenn die Klasse zum ersten Mal gefunden wird. Wenn benutzerdefinierte Attribute einer TypeDef Kompilierungseinheit MemberDef (z. B. dem Zeitstempel eines Memberkompilierungselements) zugeordnet sind, werden sie nicht zusammengeführt und müssen vom Compiler entfernt oder aktualisiert werden.

Requirements

Plattformen: Siehe .NET unterstützte Betriebssysteme.

Header: Cor.h

Library: CorGuids.lib

See also