Condividi tramite


Metodo IMetaDataEmit::MergeEnd

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

Sintassi

HRESULT MergeEnd ();

Parametri

Questo metodo non accetta parametri.

Commenti

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

Le condizioni speciali seguenti si applicano all'unione:

  • Un identificatore di versione del modulo (MVID) non viene mai importato, perché è univoco per i metadati nell'ambito di importazione.

  • Nessuna proprietà a livello di modulo esistente viene sovrascritta.

    Se le proprietà del modulo sono già state impostate per l'ambito corrente, non vengono importate proprietà del modulo. Tuttavia, se le proprietà del modulo non sono state impostate nell'ambito corrente, vengono importate una sola volta, quando vengono rilevate per la prima volta. Se tali proprietà del modulo vengono rilevate di nuovo, vengono duplicate. Se i valori di tutte le proprietà del modulo (ad eccezione di MVID) vengono confrontati e non vengono trovati duplicati, viene generato un errore.

  • Per le definizioni dei tipi (TypeDef), nessun duplicato viene unito nell'ambito corrente. TypeDefGli oggetti vengono controllati per verificare la presenza di duplicati in base alnumero di versione delGUID + del nome + dell'oggetto completo. Se esiste una corrispondenza in nome o GUID e uno degli altri due elementi è diverso, viene generato un errore. In caso contrario, se tutti e tre gli elementi corrispondono, MergeEnd esegue un controllo cursore per assicurarsi che le voci siano effettivamente duplicate; in caso contrario, viene generato un errore. Questo controllo cursory cerca:

    • Le stesse dichiarazioni membro, che si verificano nello stesso ordine. I membri contrassegnati come mdPrivateScope (vedere l'enumerazione CorMethodAttr ) non sono inclusi in questo controllo, ma vengono uniti appositamente.

    • Lo stesso layout della classe.

    Ciò significa che un TypeDef oggetto deve essere sempre definito in modo completo e coerente in ogni ambito di metadati in cui viene dichiarato. Se le relative implementazioni membro (per una classe) vengono distribuite tra più unità di compilazione, si presuppone che la definizione completa sia presente in ogni ambito e non incrementale in ogni ambito. Ad esempio, se i nomi dei parametri sono rilevanti per il contratto, devono essere generati allo stesso modo in ogni ambito; se non sono rilevanti, non devono essere generati nei metadati.

    L'eccezione è che un TypeDef oggetto può avere membri incrementali contrassegnati come mdPrivateScope. Quando si verificano questi elementi, MergeEnd li aggiunge in modo incrementale all'ambito corrente senza considerare i duplicati. Poiché il compilatore riconosce l'ambito privato, il compilatore deve essere responsabile dell'applicazione delle regole.

  • Gli indirizzi virtuali relativi (RVA) non vengono importati o uniti; Si prevede che il compilatore emetta nuovamente queste informazioni.

  • Gli attributi personalizzati vengono uniti solo quando l'elemento a cui sono collegati viene unito. Ad esempio, gli attributi personalizzati associati a una classe vengono uniti quando viene rilevata per la prima volta la classe . Se gli attributi personalizzati sono associati a o TypeDefMemberDef specifici dell'unità di compilazione ,ad esempio il timestamp di una compilazione di un membro, non vengono uniti e spetta al compilatore rimuovere o aggiornare tali metadati.

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: Cor.h

Libreria: Usato come risorsa in MSCorEE.dll

Versioni di .NET Framework: Disponibile dalla versione 1.1

Vedi anche