Compartir a través de


IMetaDataEmit::MergeEnd Method

Combina en el ámbito actual todos los ámbitos de metadatos especificados por una o varias llamadas anteriores a IMetaDataEmit::Merge.

Syntax

HRESULT MergeEnd ();

Parameters

Este método no toma ningún parámetro.

Remarks

Esta rutina desencadena la combinación real de metadatos, de todos los ámbitos de importación especificados por las llamadas anteriores a IMetaDataEmit::Merge, en el ámbito de salida actual.

Las siguientes condiciones especiales se aplican a la combinación:

  • Nunca se importa un identificador de versión de módulo (MVID), ya que es único para los metadatos del ámbito de importación.

  • No se sobrescriben las propiedades de todo el módulo existentes.

    Si las propiedades del módulo ya estaban establecidas para el ámbito actual, no se importan propiedades de módulo. Sin embargo, si las propiedades del módulo no se han establecido en el ámbito actual, solo se importan una vez, cuando se encuentran por primera vez. Si se vuelven a encontrar esas propiedades del módulo, son duplicados. Si se comparan los valores de todas las propiedades del módulo (excepto MVID) y no se encuentra ningún duplicado, se genera un error.

  • Para las definiciones de tipo (TypeDef), no se combinan duplicados en el ámbito actual. TypeDefLos objetos se comprueban si hay duplicados en cadanúmero de versiónguid + de nombre + de objeto completo. Si hay una coincidencia en el nombre o el GUID, y cualquiera de los otros dos elementos es diferente, se genera un error. De lo contrario, si coinciden los tres elementos, MergeEnd realiza una comprobación de cursor para asegurarse de que las entradas están duplicadas; si no es así, se genera un error. Esta comprobación cursory busca:

    • Las mismas declaraciones de miembro, que se producen en el mismo orden. Los miembros marcados como mdPrivateScope (vea la enumeración CorMethodAttr ) no se incluyen en esta comprobación; se combinan especialmente.

    • El mismo diseño de clase.

    Esto significa que un TypeDef objeto siempre debe estar definido de forma completa y coherente en cada ámbito de metadatos en el que se declara; si sus implementaciones de miembro (para una clase) se distribuyen entre varias unidades de compilación, se supone que la definición completa está presente en cada ámbito y no incremental en cada ámbito. Por ejemplo, si los nombres de parámetro son relevantes para el contrato, deben emitirse de la misma manera en todos los ámbitos; si no son relevantes, no deben emitirse en metadatos.

    La excepción es que un TypeDef objeto puede tener miembros incrementales marcados como mdPrivateScope. Al encontrarlos, MergeEnd los agrega incrementalmente al ámbito actual sin tener en cuenta los duplicados. Dado que el compilador entiende el ámbito privado, el compilador debe ser responsable de aplicar reglas.

  • Las direcciones virtuales relativas (RVAs) no se importan ni combinan; Se espera que el compilador vuelva a emitir esta información.

  • Los atributos personalizados solo se combinan cuando se combina el elemento al que están asociados. Por ejemplo, los atributos personalizados asociados a una clase se combinan cuando se encuentra la clase por primera vez. Si los atributos personalizados están asociados a o TypeDefMemberDef que son específicos de la unidad de compilación (como la marca de tiempo de una compilación de miembro), no se combinan y es hasta el compilador para quitar o actualizar dichos metadatos.

Requirements

Plataformas: Consulte Sistemas operativos compatibles con .NET.

Header: Cor.h

Library: CorGuids.lib

See also