Share via


Método IMetaDataEmit::MergeEnd

Mescla no escopo atual todos os escopos de metadados especificados por uma ou mais chamadas anteriores para IMetaDataEmit::Merge.

Sintaxe

HRESULT MergeEnd ();

Parâmetros

Este método não aceita parâmetros.

Comentários

Essa rotina dispara a mesclagem real de metadados, de todos os escopos de importação especificados pelas chamadas anteriores para IMetaDataEmit::Merge, no escopo de saída atual.

As seguintes condições especiais se aplicam à mesclagem:

  • Um MVID (identificador de versão do módulo) nunca é importado, pois é exclusivo dos metadados no escopo de importação.

  • Nenhuma propriedade existente em todo o módulo é substituída.

    Se as propriedades do módulo já tiverem sido definidas para o escopo atual, nenhuma delas será importada. No entanto, se elas não tiverem sido definidas no escopo atual, serão importadas somente quando forem encontradas pela primeira vez. Se essas propriedades do módulo forem encontradas novamente, elas serão duplicadas. Se os valores de todas as propriedades do módulo (exceto MVID) forem comparados e nenhuma duplicata for encontrada, um erro será gerado.

  • Para definições de tipo (TypeDef), nenhuma duplicata é mesclada no escopo atual. Os objetos TypeDef são verificados quanto a duplicatas em relação a cada nome de objeto totalmente qualificado + GUID + número de versão. Se houver uma correspondência de nome ou GUID e qualquer um dos outros dois elementos for diferente, um erro será gerado. Caso contrário, se todos os três itens corresponderem, o MergeEnd fará uma verificação superficial para garantir que as entradas sejam realmente duplicatas. Se não forem, um erro será gerado. Esta verificação superficial procura:

    • As mesmas declarações de membro, ocorrendo na mesma ordem. Os membros sinalizados como mdPrivateScope (veja a enumeração CorMethodAttr) não estão incluídos nesta verificação, pois são mesclados de maneira especial.

    • O mesmo layout de classe.

    Isso significa que um objeto TypeDef deve sempre ser definido de maneira completa e consistente em cada escopo de metadados em que é declarado. Se as implementações de membros (para uma classe) estiverem espalhadas por muitas unidades de compilação, supõe-se que a definição completa esteja presente em todos os escopos e não de maneira incremental em cada um deles. Por exemplo, se os nomes dos parâmetros forem relevantes para o contrato, eles deverão ser emitidos da mesma maneira em todos os escopos. Se não forem relevantes, não deverão ser emitidos em metadados.

    A exceção é que um objeto TypeDef pode ter membros incrementais sinalizados como mdPrivateScope. Ao encontrar esses membros, o MergeEnd os adiciona incrementalmente ao escopo atual sem considerar duplicatas. Como o compilador entende o escopo privado, ele deve ser responsável por impor regras.

  • Os RVAs (endereços virtuais relativos) não são importados ou mesclados. Espera-se que o compilador reemita essas informações.

  • Os atributos personalizados são mesclados somente quando o item ao qual estão anexados é mesclado. Por exemplo, os atributos personalizados associados a uma classe são mesclados quando ela é encontrada pela primeira vez. Se os atributos personalizados estiverem associados a um TypeDef ou MemberDef específico da unidade de compilação (como o carimbo de data/hora de uma compilação de membro), eles não serão mesclados e caberá ao compilador remover ou atualizar esses metadados.

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: Cor.h

Biblioteca: usada como um recurso em MSCorEE.dll

Versões do .NET Framework: disponíveis a partir da 1.1

Confira também