Método de IMetaDataEmit::MergeEnd
Mesclagens em atual scope os escopos de metadados especificados por um ou mais chamadas anteriores para IMetaDataEmit::Merge.
HRESULT MergeEnd ();
Parâmetros
Esse método sem parâmetros.
Comentários
Essa rotina aciona reais de mesclagem de metadados, de todos os escopos especificados precedendo chamadas de importar IMetaDataEmit::Merge, para o escopo de saída atual.
As seguintes condições especiais aplicam-se a mesclagem:
Um identificador de versão do módulo (MVID) nunca é importado, porque ele é exclusivo para os metadados no escopo de importação.
Propriedades de todo o módulo não existentes são substituídas.
Se o módulo propriedades já foram definidas para o escopo atual, as propriedades do módulo são importadas. No entanto, se as propriedades do módulo não tem sido definidas no escopo atual, eles serão importados somente uma vez, quando são encontrados pela primeira vez. Se essas propriedades do módulo são encontradas novamente, eles são duplicatas. Se os valores de todas as propriedades do módulo (exceto MVID) são comparados e nenhum duplicatas são encontradas, um erro é gerado.
Para obter as definições de tipo (TypeDef), não há duplicatas são mescladas o escopo atual. TypeDefobjetos são verificados para duplicatas em relação a cada nome do objeto totalmente qualificado + GUID + o número de versão. Se houver uma correspondência no nome ou GUID e qualquer um dos outros dois elementos é diferente, um erro é gerado. Caso contrário, se corresponderem a todos os três itens, MergeEnd faz uma verificação superficial para garantir que as entradas são realmente duplicatas; Caso contrário, será gerado um erro. Ela superficial procura:
As declarações de membro mesmo, que ocorrem na mesma ordem. Membros que são marcados como mdPrivateScope (consulte a CorMethodAttr enumeração) não estão incluídos nessa verificação; elas são especialmente mescladas.
O mesmo layout de classe.
Isso significa que uma TypeDef objeto deve sempre ser totalmente e consistentemente definido 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 é considerada presente em cada escopo e não incrementais para cada escopo. Por exemplo, se os nomes de parâmetro são 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 uma TypeDef objeto pode ter membros incrementais, sinalizados como mdPrivateScope. No que se deparar com elas, MergeEnd incrementalmente adiciona-los para o escopo atual sem considerar de duplicatas. Porque o compilador compreende o escopo em particular, o compilador deve ser responsável por impor regras.
Endereços virtuais relativos (RVAs) não serão importados ou mesclados. espera-se que o compilador re-emit essas informações.
Atributos personalizados são mesclados somente quando o item ao qual eles estão conectados é mesclado. Por exemplo, os atributos personalizados associados a uma classe são mesclados quando a classe é encontrada primeiro. Se os atributos personalizados são associados com um TypeDef ou MemberDef que é específico para a unidade de compilação (como o carimbo de hora de uma compilação de membro), elas não são mescladas e é o compilador para remover ou atualizar esses metadados.
Requisitos
Plataformas: Consulte Requisitos de sistema do .NET Framework.
Cabeçalho: Cor.h
Biblioteca: Usado como um recurso em mscoree
.NET Framework versões: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1