Sdílet prostřednictvím


IMetaDataEmit::MergeEnd – metoda

Sloučí do aktuálního oboru všechny obory metadat určené jedním nebo více předchozími voláními IMetaDataEmit::Merge.

Syntaxe

HRESULT MergeEnd ();

Parametry

Tato metoda nepřijímá žádné parametry.

Poznámky

Tato rutina aktivuje skutečné sloučení metadat všech oborů importu zadaných před voláním IMetaDataEmit::Merge, do aktuálního výstupního oboru.

Na sloučení platí následující zvláštní podmínky:

  • Identifikátor verze modulu (MVID) se nikdy neimportuje, protože je jedinečný pro metadata v oboru importu.

  • Žádné existující vlastnosti pro celý modul nejsou přepsány.

    Pokud už byly vlastnosti modulu pro aktuální obor nastaveny, neimportují se žádné vlastnosti modulu. Pokud však vlastnosti modulu nebyly v aktuálním oboru nastaveny, importují se pouze jednou, když jsou poprvé nalezeny. Pokud se tyto vlastnosti modulu znovu zobrazí, jedná se o duplikáty. Pokud jsou porovnány hodnoty všech vlastností modulu (s výjimkou MVID) a nejsou nalezeny žádné duplicity, vyvolá se chyba.

  • U definic typů (TypeDef) se do aktuálního oboru nesloučí žádné duplicity. TypeDef objekty jsou kontrolovány duplicity proti každému plně kvalifikovanému názvu + guid + číslo verze. Pokud existuje shoda s názvem nebo identifikátorem GUID a některý z dalších dvou prvků se liší, vyvolá se chyba. V opačném případě, pokud se všechny tři položky shodují, MergeEnd provede zběžnou kontrolu, aby se zajistilo, že položky jsou skutečně duplicitní. Pokud ne, vyvolá se chyba. Tato kurzorová kontrola hledá:

    • Stejné deklarace členů, které se vyskytují ve stejném pořadí. Členové, kteří jsou označeni jako mdPrivateScope (viz výčet CorMethodAttr ), nejsou zahrnuti do této kontroly; jsou sloučeni speciálně.

    • Stejné rozložení třídy.

    To znamená, že TypeDef objekt musí být vždy plně a konzistentně definován v každém oboru metadat, ve kterém je deklarován. Pokud jsou jeho členské implementace (pro třídu) rozloženy do více jednotek kompilace, předpokládá se, že úplná definice je přítomna v každém oboru a ne přírůstkové pro každý obor. Pokud jsou například názvy parametrů relevantní pro kontrakt, musí být vygenerovány stejným způsobem do každého oboru; pokud nejsou relevantní, neměly by se vysílat do metadat.

    Výjimkou je, že TypeDef objekt může mít přírůstkové členy označené jako mdPrivateScope. Když na ně narazíte, MergeEnd postupně je přidáte do aktuálního oboru bez ohledu na duplicity. Vzhledem k tomu, že kompilátor rozumí privátnímu oboru, musí být za vynucování pravidel zodpovědný.

  • Relativní virtuální adresy (RVA) se neimportují ani neslučují. očekává se, že kompilátor tyto informace znovu vygeneruje.

  • Vlastní atributy se sloučí pouze při sloučení položky, ke které jsou připojeny. Například vlastní atributy přidružené k třídě se sloučí při prvním zobrazení třídy. Pokud jsou vlastní atributy přidruženy TypeDefMemberDef k nebo, které jsou specifické pro jednotku kompilace (například časové razítko členské kompilace), nejsou sloučeny a je na kompilátoru, aby taková metadata odebral nebo aktualizoval.

Požadavky

Platformy: Viz Požadavky na systém.

Záhlaví: Kor.h

Knihovny: Používá se jako prostředek v MSCorEE.dll

Verze rozhraní .NET Framework: K dispozici od verze 1.1

Viz také