Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Fusionne dans l’étendue actuelle toutes les étendues de métadonnées spécifiées par un ou plusieurs appels antérieurs à IMetaDataEmit ::Merge.
Syntax
HRESULT MergeEnd ();
Parameters
Cette méthode ne prend aucun paramètre.
Remarks
Cette routine déclenche la fusion réelle des métadonnées, de toutes les étendues d’importation spécifiées par les appels précédents à IMetaDataEmit::Merge, dans l’étendue de sortie actuelle.
Les conditions spéciales suivantes s’appliquent à la fusion :
Un identificateur de version de module (MVID) n’est jamais importé, car il est unique aux métadonnées de l’étendue d’importation.
Aucune propriété existante à l’échelle du module n’est remplacée.
Si les propriétés du module ont déjà été définies pour l’étendue actuelle, aucune propriété de module n’est importée. Toutefois, si les propriétés du module n’ont pas été définies dans l’étendue actuelle, elles ne sont importées qu’une seule fois, lorsqu’elles sont rencontrées pour la première fois. Si ces propriétés de module sont à nouveau rencontrées, elles sont des doublons. Si les valeurs de toutes les propriétés de module (à l’exception de MVID) sont comparées et qu’aucun doublon n’est trouvé, une erreur est générée.
Pour les définitions de type (
TypeDef), aucun doublon n’est fusionné dans l’étendue actuelle.TypeDefles objets sont vérifiés pour les doublons par rapport à chaquenuméro de versionGUID + du nom + d’objet complet. S’il existe une correspondance sur un nom ou un GUID et que l’un des deux autres éléments est différent, une erreur est générée. Sinon, si les trois éléments correspondent,MergeEndeffectue une vérification pointeuse pour vérifier que les entrées sont en effet dupliquées ; sinon, une erreur est générée. Cette vérification de curseur recherche :Les mêmes déclarations de membre, qui se produisent dans le même ordre. Les membres marqués comme
mdPrivateScopeétant (voir l’énumération CorMethodAttr ) ne sont pas inclus dans cette vérification ; ils sont fusionnés spécialement.La même disposition de classe.
Cela signifie qu’un
TypeDefobjet doit toujours être entièrement et constamment défini dans chaque étendue de métadonnées dans laquelle il est déclaré ; si ses implémentations membres (pour une classe) sont réparties sur plusieurs unités de compilation, la définition complète est supposée être présente dans chaque étendue et non incrémentielle à chaque étendue. Par exemple, si les noms de paramètres sont pertinents pour le contrat, ils doivent être émis de la même façon dans chaque étendue ; s’ils ne sont pas pertinents, ils ne doivent pas être émis dans les métadonnées.L’exception est qu’un
TypeDefobjet peut avoir des membres incrémentiels marqués commemdPrivateScope. En cas de rencontre,MergeEndles ajoute de manière incrémentielle à l’étendue actuelle sans tenir compte des doublons. Étant donné que le compilateur comprend l’étendue privée, le compilateur doit être responsable de l’application des règles.Les adresses virtuelles relatives (RVA) ne sont pas importées ou fusionnées ; le compilateur est censé réécrire ces informations.
Les attributs personnalisés sont fusionnés uniquement lorsque l’élément auquel ils sont attachés est fusionné. Par exemple, les attributs personnalisés associés à une classe sont fusionnés lorsque la classe est rencontrée pour la première fois. Si des attributs personnalisés sont associés à une
TypeDefunité de compilation spécifiqueMemberDefou spécifique à l’unité de compilation (par exemple, l’horodatage d’une compilation de membre), ils ne sont pas fusionnés et le compilateur doit supprimer ou mettre à jour ces métadonnées.
Requirements
Plates-formes: Consultez les systèmes d’exploitation pris en charge par .NET.
Header: Cor.h
Library: CorGuids.lib