Partilhar via


Método IMetaDataEmit::MergeEnd

Mesclagens dentro do escopo corrente os escopos de metadados especificado por um ou mais chamadas anteriores para IMetaDataEmit::mesclagem.

HRESULT MergeEnd ();

Parâmetros

Esse método não usa nenhum parâmetro.

Comentários

Esta rotina aciona a mesclagem real dos metadados de todos os escopos de importação especificado por chamadas para precedenteIMetaDataEmit::Merge, dentro do escopo de saída corrente.

As seguintes condições especiais se aplicam mesclagem:

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

  • Nenhuma propriedade de todo o módulo existente é sobrescrita.

    Se já módulo propriedades conjunto para o escopo corrente, nenhum módulo propriedades são importadas. No entanto, se o módulo propriedades não foram definidas no escopo corrente, eles serão importados somente uma vez, quando são encontrados pela primeira vez. Se as propriedades de módulo são encontradas novamente, eles são duplicatas. Se os valores de todas as propriedades de módulo (exceto MVID) são comparados e não há duplicatas são encontradas, será gerado um erro.

  • Para obter definições de tipo (TypeDef), não há duplicatas são mescladas em escopo corrente. TypeDef objetos são verificados para duplicatas em relação a cada nome do objeto totalmente qualificado + GUID + número de versão. Se houver uma correspondência no nome ou GUID e qualquer um dos outros dois elementos é diferente, será gerado um erro. Caso contrário, se corresponder a todos os três itens, MergeEnd realiza uma verificação superficial para certificar-se que as entradas são realmente duplicatas; caso contrário, será gerado um erro. Essa verificação superficial procura:

    • As declarações de membro mesmo, ocorrendo na mesma ordem. Membros são sinalizados sistema autônomo mdPrivateScope (consulte a CorMethodAttr enumeração) não são incluídos nessa verificação; elas são mescladas especialmente.

    • O mesmo layout de classe.

    Isso significa que um TypeDef objeto sempre deve ser totalmente e definido consistentemente em cada escopo de metadados na qual é declarada; se suas implementações de membro (para uma classe) são distribuídas entre várias unidades de compilação, a definição completa será considerada presentes em cada escopo e não incrementais para cada escopo. Por exemplo, se os nomes de parâmetro forem relevantes para o contrato, eles devem ser emitidos da mesma maneira em cada escopo; se não forem relevantes, eles não devem ser emitidos em metadados.

    A exceção é que um TypeDef objeto pode ter membros incrementais sinalizados sistema autônomo mdPrivateScope. Em se deparar com elas, MergeEnd incrementalmente adiciona-os ao escopo corrente sem considerar de duplicatas. Como o compilador compreende o escopo particular, o compilador deve ser responsável por impor regras.

  • Endereços virtual relativos (RVAs) não serão importados ou mesclados; o compilador deverá re-emit essas informações.

  • Atributos personalizados são mesclados somente quando o item ao qual eles estão conectados é mesclado. Por exemplo, atributos personalizados associados a uma classe são mesclados quando a classe é encontrada primeiro. Se estiver associados a um atributos personalizadosTypeDef ou MemberDef que é específico para a unidade de compilar (sistema autônomo o carimbo de data / time de uma compilar de membro), elas não são mescladas e é para o compilador para remover ou atualizar esses metadados.

Requisitos

Plataformas: See Requisitos de sistema do .NET framework.

Cabeçalho: Cor.h

Biblioteca: Usado sistema autônomo um recurso em MSCorEE.dll

.NET Framework Versions: 3.5 SP1, 3,5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1

Consulte também

Referência

Interface IMetaDataEmit

Interface IMetaDataEmit2