Dela via


IMetaDataEmit::MergeEnd-metod

Sammanfogar alla metadataomfång som angetts av ett eller flera tidigare anrop till IMetaDataEmit::Merge i det aktuella omfånget.

Syntax

HRESULT MergeEnd ();

Parametrar

Den här metoden tar inga parametrar.

Kommentarer

Den här rutinen utlöser den faktiska sammanfogningen av metadata, för alla importomfattningar som anges av föregående anrop till IMetaDataEmit::Merge, i det aktuella utdataomfånget.

Följande särskilda villkor gäller för sammanfogningen:

  • En modulversionsidentifierare (MVID) importeras aldrig eftersom den är unik för metadata i importomfånget.

  • Inga befintliga modulomfattande egenskaper skrivs över.

    Om modulegenskaper redan har angetts för det aktuella omfånget importeras inga modulegenskaper. Men om modulegenskaperna inte har angetts i det aktuella omfånget importeras de bara en gång när de först påträffas. Om dessa modulegenskaper påträffas igen är de dubbletter. Om värdena för alla modulegenskaper (utom MVID) jämförs och inga dubbletter hittas utlöses ett fel.

  • För typdefinitioner (TypeDef) sammanfogas inga dubbletter i det aktuella omfånget. TypeDef objekt kontrolleras för dubbletter mot varje fullständigt kvalificerat objektnamn + GUID + versionsnummer. Om det finns en matchning på antingen namn eller GUID, och något av de andra två elementen skiljer sig åt, utlöses ett fel. Annars, om alla tre objekten matchar, MergeEnd gör en snabb kontroll för att säkerställa att posterna verkligen är dubbletter. Om inte utlöses ett fel. Den här markören söker efter:

    • Samma medlemsdeklarationer sker i samma ordning. Medlemmar som flaggas som mdPrivateScope (se CorMethodAttr-uppräkning ) ingår inte i den här kontrollen. De sammanfogas särskilt.

    • Samma klasslayout.

    Det innebär att ett TypeDef objekt alltid måste definieras fullständigt och konsekvent i varje metadataomfång där det deklareras. Om dess medlemsimplementeringar (för en klass) är spridda över flera kompileringsenheter antas den fullständiga definitionen finnas i varje omfång och inte stegvis för varje omfång. Om parameternamn till exempel är relevanta för kontraktet måste de utelämnas på samma sätt i alla omfång. om de inte är relevanta bör de inte skickas till metadata.

    Undantaget är att ett TypeDef objekt kan ha inkrementella medlemmar flaggade som mdPrivateScope. När du stöter på dessa MergeEnd läggs de stegvis till i det aktuella omfånget utan hänsyn till dubbletter. Eftersom kompilatorn förstår det privata omfånget måste kompilatorn vara ansvarig för att genomdriva regler.

  • Relativa virtuella adresser (RVA) importeras eller sammanfogas inte. kompilatorn förväntas avge den här informationen igen.

  • Anpassade attribut sammanfogas endast när objektet som de är kopplade till slås samman. Till exempel sammanfogas anpassade attribut som är associerade med en klass när klassen först påträffas. Om anpassade attribut är associerade med en TypeDef eller MemberDef som är specifik för kompileringsenheten (till exempel tidsstämpeln för en medlemskompilering) slås de inte samman och det är upp till kompilatorn att ta bort eller uppdatera sådana metadata.

Krav

Plattformar: Se Systemkrav.

Huvudet: Cor.h

Bibliotek: Används som en resurs i MSCorEE.dll

.NET Framework versioner: Tillgänglig sedan 1.1

Se även