Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Mescla no escopo atual todos os escopos de metadados especificados por uma ou mais chamadas anteriores a IMetaDataEmit::Merge.
Syntax
HRESULT MergeEnd ();
Parameters
Esse método não usa parâmetros.
Remarks
Essa rotina dispara a mesclagem real de metadados, de todos os escopos de importação especificados pelas chamadas anteriores para IMetaDataEmit::Mergeo 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 para os metadados no escopo de importação.
Nenhuma propriedade existente em todo o módulo é substituída.
Se as propriedades do módulo já estiverem definidas para o escopo atual, nenhuma propriedade de módulo será importada. No entanto, se as propriedades do módulo não tiverem sido definidas no escopo atual, elas serão importadas apenas uma vez, 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.TypeDefos objetos são verificados quanto a duplicatas em cadanúmero de versãoguid + de nome + de objeto totalmente qualificado. Se houver uma correspondência em 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,MergeEndfará uma verificação de cursor para garantir que as entradas sejam realmente duplicadas; caso contrário, um erro será gerado. Esta verificação cursor procura:As mesmas declarações de membro, ocorrendo na mesma ordem. Os membros sinalizados como
mdPrivateScope(consulte a enumeração CorMethodAttr ) não estão incluídos nessa verificação; eles são mesclados especialmente.O mesmo layout de classe.
Isso significa que um
TypeDefobjeto deve ser sempre totalmente e consistentemente definido em cada escopo de metadados no qual é declarado; se suas implementações de membro (para uma classe) forem distribuídas em várias unidades de compilação, a definição completa será considerada presente em todos os escopos e não incremental para cada escopo. Por exemplo, se os nomes de parâmetro forem relevantes para o contrato, eles deverão ser emitidos da mesma maneira em todos os escopos; se elas não forem relevantes, elas não deverão ser emitidas em metadados.A exceção é que um
TypeDefobjeto pode ter membros incrementais sinalizados comomdPrivateScope. Ao encontrá-los,MergeEndadiciona-os incrementalmente ao escopo atual sem considerar as duplicatas. Como o compilador entende o escopo privado, o compilador 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 emita novamente essas informações.
Os atributos personalizados são mesclados somente quando o item ao qual são anexados é mesclado. Por exemplo, atributos personalizados associados a uma classe são mesclados quando a classe é encontrada pela primeira vez. Se os atributos personalizados estiverem associados a um
TypeDefouMemberDefque seja específico à unidade de compilação (como o carimbo de data/hora de um compilador de membro), eles não serão mesclados e cabe ao compilador remover ou atualizar esses metadados.
Requirements
Plataformas: Consulte sistemas operacionais com suporte do .NET.
Header: Cor.h
Library: CorGuids.lib