Compartir a través de


IMetaDataEmit::MergeEnd (Método)

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

Sintaxis

HRESULT MergeEnd ();

Parámetros

Este método no toma parámetros.

Comentarios

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

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

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

  • Las propiedades existentes en todo el módulo no se sobrescriben.

    Si las propiedades del módulo ya se han establecido para el ámbito actual, no se importa ninguna propiedad del módulo. Pero 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. En el caso de que se vuelvan a encontrar esas propiedades del módulo, se duplicarán. Si se comparan los valores de todas las propiedades del módulo (excepto MVID) y no se encuentra ningún duplicado, se generará un error.

  • En el caso de las definiciones de tipo (TypeDef), no se combina ningún duplicado en el ámbito actual. Los objetos TypeDef se comprueban si hay duplicados en cada número de versión de + GUID + del 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 los tres elementos coinciden, MergeEnd realiza una comprobación rápida para asegurarse de que las entradas están duplicadas; si no es así, se genera un error. Esta comprobación rápida busca lo siguiente:

    • 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; sino que se combinan de forma especial.

    • El mismo diseño de clase.

    Esto significa que un objeto TypeDef 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 todos los ámbitos y no es incremental en cada ámbito. Por ejemplo, si los nombres de parámetro son relevantes para el contrato, deben emitirse de la misma manera en cada ámbito; si no son relevantes, no deben emitirse en los metadatos.

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

  • Las direcciones virtuales relativas (RVA) 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 un elemento TypeDef o MemberDef 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 el compilador debe decidir quitar o actualizar estos metadatos.

Requisitos

Plataformas: Vea Requisitos de sistema.

Encabezado: Cor.h

Biblioteca: usada como recurso en MSCorEE.dll

Versiones de .NET Framework: disponible a partir de la versión 1.1

Consulte también