Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Mescla no escopo atual todos os escopos de metadados especificados por uma ou mais chamadas anteriores para IMetaDataEmit::Merge.
Syntax
HRESULT MergeEnd ();
Parameters
Este método não usa parâmetros.
Remarks
Essa rotina aciona a mesclagem real de metadados, de todos os escopos de importação especificados por chamadas anteriores para IMetaDataEmit::Merge, no escopo de saída atual.
Aplicam-se as seguintes condições especiais à fusão:
Um identificador de versão do módulo (MVID) nunca é importado, porque é 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 do 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.TypeDefobjetos são verificados quanto a duplicatas em relação a cadanome + de objeto totalmente qualificado, númerode versão GUID + . Se houver uma correspondência em qualquer 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,MergeEndfaz uma verificação rápida para garantir que as entradas são realmente duplicadas, se não, um erro é gerado. Esta verificação superficial procura:As mesmas declarações de membro, ocorrendo na mesma ordem. Membros que são sinalizados como
mdPrivateScope(consulte a enumeração CorMethodAttr ) não são incluídos nesta verificação, eles são mesclados especialmente.O mesmo layout de classe.
Isso significa que um
TypeDefobjeto deve ser sempre definido de forma completa e consistente em cada escopo de metadados em que é declarado, se suas implementações de membro (para uma classe) estão espalhadas por várias unidades de compilação, a definição completa é assumida como presente em todos os escopo e não incremental para cada escopo. Por exemplo, se os nomes dos parâmetros forem relevantes para o contrato, devem ser emitidos da mesma forma em todos os âmbitos; se não forem relevantes, não devem ser emitidos para metadados.A exceção é que um
TypeDefobjeto pode ter membros incrementais sinalizados comomdPrivateScope. Ao encontrá-los,MergeEndadiciona-os incrementalmente ao escopo atual sem levar em conta duplicatas. Como o compilador entende o escopo privado, o compilador deve ser responsável por impor regras.Os endereços virtuais relativos (RVAs) 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 eles estã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 para a unidade de compilação (como o carimbo de data/hora de uma compilação membro), eles não serão mesclados e caberá ao compilador remover ou atualizar esses metadados.
Requirements
Plataformas: Consulte Sistemas operacionais suportados pelo .NET.
Header: Cor.h
Library: CorGuids.lib