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.TypeDef
Gli 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 comemdPrivateScope
. 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
TypeDef
MemberDef
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