Compartir a través de


IMetaDataEmit::MergeEnd (Método)

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

HRESULT MergeEnd ();

Parámetros

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

Comentarios

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

Se aplican las siguientes condiciones especiales a la combinación:

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

  • No se sobrescribe ninguna propiedad existente en el nivel de módulo.

    Si ya se han establecido propiedades de módulo para el ámbito actual, no se importa ninguna propiedad de módulo. Sin embargo, si no se han establecido propiedades de módulo en el ámbito actual, se importan una sola vez, la primera vez que se encuentran. Si se vuelven a encontrar esas propiedades de módulo, se trata de duplicados. Si se comparan los valores de todas las propiedades de módulo (excepto el MVID) y no se encuentran duplicados, se produce un error.

  • En las definiciones de tipos (TypeDef), no se combinan duplicados en el ámbito actual. Se comprueba si hay duplicados en los objetos TypeDef con cada nombre de objeto completo + GUID + número de versión. Si hay una coincidencia de nombre o GUID y cualquiera de los otros dos elementos es diferente, se produce un error. Si los tres elementos coinciden, MergeEnd realiza una comprobación superficial para garantizar que las entradas son en realidad duplicados; si no, se produce un error. Esta comprobación superficial busca:

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

    • El mismo diseño de clase.

    Esto significa que un objeto TypeDef siempre debe estar definido de manera completa y coherente en cada ámbito de metadatos en que se declara; si sus implementaciones de miembros (de una clase) están propagadas por varias unidades de compilación, se supone que la definición completa está presente en cada ámbito y no de forma incremental. Por ejemplo, si los nombres de parámetro son relevantes al contrato, se deben emitir de la misma manera en cada ámbito; si no lo son, no se deberían emitir en los metadatos.

    La excepción es que un objeto TypeDef puede tener miembros incrementales marcados como mdPrivateScope. Si se encuentran, MergeEnd los agrega incrementalmente al ámbito actual sin considerar los duplicados. Dado que el compilador reconoce el ámbito privado, éste debe encargarse de imponer las reglas.

  • No se importan ni se combinan las direcciones virtuales relativas (RVA); se espera que el compilador vuelva a emitir esta información.

  • Los atributos personalizados sólo se combinan cuando se combina el elemento al que están asociados. Por ejemplo, los atributos personalizados asociados a una clase se combinan la primera vez que se encuentra la clase. Si los atributos personalizados están asociados a un objeto TypeDef o MemberDef que es específico de la unidad de compilación (como la marca de tiempo de una compilación de miembro), no se combinan y es decisión del compilador quitar o actualizar tales metadatos.

Requisitos

Plataformas: vea Requisitos de sistema de .NET Framework.

Encabezado: Cor.h

Biblioteca: Se usa como recurso en MSCorEE.dll

Versiones de .NET Framework: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1

Vea también

Referencia

IMetaDataEmit (Interfaz)

IMetaDataEmit2 (Interfaz)