Partilhar via


Método IMetaDataEmit::MergeEnd

Intercala no âmbito atual todos os âmbitos de metadados especificados por uma ou mais chamadas anteriores para IMetaDataEmit::Merge.

Sintaxe

HRESULT MergeEnd ();

Parâmetros

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

Observações

Esta rotina aciona a intercalação real de metadados, de todos os âmbitos de importação especificados pelas chamadas anteriores a IMetaDataEmit::Merge, para o âmbito de saída atual.

As seguintes condições especiais aplicam-se à intercalação:

  • Um identificador de versão do módulo (MVID) nunca é importado porque é exclusivo para os metadados no âmbito de importação.

  • Não são substituídas propriedades existentes em todo o módulo.

    Se as propriedades do módulo já tiverem sido definidas para o âmbito atual, não serão importadas propriedades do módulo. No entanto, se as propriedades do módulo não tiverem sido definidas no âmbito atual, serão importadas apenas uma vez, quando forem encontradas pela primeira vez. Se essas propriedades do módulo forem encontradas novamente, serão duplicadas. Se os valores de todas as propriedades do módulo (exceto MVID) forem comparados e não forem encontrados duplicados, será gerado um erro.

  • Para definições de tipo (TypeDef), não são intercalados duplicados no âmbito atual. TypeDefOs objetos são verificados quanto a duplicados em relação a cadanúmero de versãoGUID + de nome + de objeto completamente qualificado. Se existir uma correspondência no nome ou GUID e qualquer um dos outros dois elementos for diferente, será gerado um erro. Caso contrário, se os três itens corresponderem, MergeEnd efetua uma verificação do cursor para garantir que as entradas são realmente duplicadas; caso contrário, é gerado um erro. Esta verificação do cursor procura:

    • As mesmas declarações de membro, que ocorrem na mesma ordem. Os membros sinalizados como mdPrivateScope (ver a enumeração CorMethodAttr ) não estão incluídos nesta verificação; são intercalados especialmente.

    • O mesmo esquema de classe.

    Isto significa que um TypeDef objeto tem de ser sempre definido de forma completa e consistente em todos os âmbitos de metadados em que é declarado; se as implementações dos membros (para uma classe) forem distribuídas por várias unidades de compilação, pressupõe-se que a definição completa está presente em todos os âmbitos e não incremental para cada âmbito. Por exemplo, se os nomes dos parâmetros forem relevantes para o contrato, têm de ser emitidos da mesma forma em todos os âmbitos; Se não forem relevantes, não devem ser emitidos em metadados.

    A exceção é que um TypeDef objeto pode ter membros incrementais sinalizados como mdPrivateScope. Ao encontrá-los, MergeEnd adiciona-os incrementalmente ao âmbito atual sem ter em conta os duplicados. Uma vez que o compilador compreende o âmbito privado, o compilador tem de ser responsável pela aplicação de regras.

  • Os endereços virtuais relativos (RVAs) não são importados ou intercalados; Espera-se que o compilador volte a emitir estas informações.

  • Os atributos personalizados são intercalados apenas quando o item ao qual estão anexados é intercalado. Por exemplo, os atributos personalizados associados a uma classe são intercalados quando a classe é encontrada pela primeira vez. Se os atributos personalizados estiverem associados a um TypeDef ou MemberDef que seja específico à unidade de compilação (como o carimbo de data/hora de uma compilação de membro), estes não são intercalados e cabe ao compilador remover ou atualizar esses metadados.

Requisitos

Plataformas: Veja Requisitos de Sistema.

Cabeçalho: Cor.h

Biblioteca: Utilizado como recurso no MSCorEE.dll

.NET Framework Versões: Disponível desde a 1.1

Ver também