Condividi tramite


Metodo IMetaDataEmit::MergeEnd

Unisce all'ambito corrente tutti gli ambiti dei metadati specificati da una o più chiamate precedenti a IMetaDataEmit::Merge.

HRESULT MergeEnd ();

Parametri

Questo metodo non accetta parametri.

Note

Questa routine genera l'effettiva unione dei metadati, di tutti gli ambiti di importazione specificati dalle precedenti chiamate a IMetaDataEmit::Merge, nell'ambito di output corrente.

All'unione si applicano le seguenti condizioni speciali:

  • Non viene mai importato un identificatore di versione del modulo (MVID, Module Version Identifier) perché è specifico dei metadati nell'ambito di importazione.

  • Le proprietà a livello di modulo esistenti non vengono sovrascritte.

    Se sono già state impostate le proprietà del modulo per l'ambito corrente, non verranno importate proprietà del modulo. Se invece non sono state impostate nell'ambito corrente, le proprietà del modulo verranno importate solo una volta, non appena verranno rilevate. Se vengono rilevate di nuovo, si tratta di duplicati. Se vengono confrontati i valori di tutte le proprietà del modulo, tranne MVID, e non vengono trovati duplicati, verrà generato un errore.

  • Per le definizioni dei tipi (TypeDef), nessun duplicato viene unito all'ambito corrente. Gli oggetti TypeDef vengono verificati per rilevare eventuali duplicati utilizzando nome dell'oggetto completo + GUID + numero di versione. Se viene trovata una corrispondenza sulla base del nome o del GUID, e uno qualsiasi degli altri due elementi è diverso, verrà generato un errore. In caso contrario, se corrispondono tutti e tre gli elementi, MergeEnd esegue un controllo superficiale per verificare che le voci siano veramente duplicate. In caso negativo, verrà generato un errore. Mediante tale controllo superficiale viene cercato quanto segue:

    • Le stesse dichiarazioni di membri, nello stesso ordine. I membri contrassegnati come mdPrivateScope (vedere l'enumerazione CorMethodAttr) non vengono inclusi in questo controllo, ma vengono uniti con una modalità speciale.

    • Lo stesso layout di classe.

    Ciò significa che un oggetto TypeDef deve essere sempre definito in modo completo e coerente in tutti gli ambiti dei metadati nei quali è dichiarato. Se le relative implementazioni dei membri (per una classe) sono distribuite su più unità di compilazione, si presumerà la presenza della definizione completa in ogni ambito e non di una definizione incrementale per ciascun ambito. Se ad esempio i nomi dei parametri sono rilevanti per il contratto, devono essere generati nello stesso modo in ogni ambito. Se non sono rilevanti, non devono essere generati nei metadati.

    L'eccezione è rappresentata dal fatto che un oggetto TypeDef può includere membri incrementali contrassegnati come mdPrivateScope. Al rilevamento di tali membri, MergeEnd li aggiunge in modo incrementale all'ambito corrente senza tenere conto dei duplicati. Poiché il compilatore riconosce l'ambito privato, deve essere responsabile dell'applicazione delle regole.

  • Gli indirizzi virtuali relativi (RVA, Relative Virtual Address) non vengono importati o uniti. È previsto che il compilatore generi nuovamente tali informazioni.

  • Gli attributi personalizzati vengono uniti solo quando viene unito l'elemento a cui sono associati. Ad esempio, gli attributi personalizzati associati a una classe vengono uniti al primo rilevamento della classe. Se gli attributi personalizzati sono associati a un TypeDef oppure a un MemberDef specifico dell'unità di compilazione, ad esempio il timestamp di una compilazione di membri, non verranno uniti e spetterà al compilatore rimuovere o aggiornare tali metadati.

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: Cor.h

Libreria: utilizzata come risorsa in MSCorEE.dll

Versioni di .NET Framework: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1

Vedere anche

Riferimenti

Interfaccia IMetaDataEmit

Interfaccia IMetaDataEmit2