Método IMetaDataEmit::MergeEnd
Mescla no escopo atual todos os escopos de metadados especificados por uma ou mais chamadas anteriores para IMetaDataEmit::Merge.
Sintaxe
HRESULT MergeEnd ();
Parâmetros
Este método não aceita parâmetros.
Comentários
Essa rotina dispara a mesclagem real de metadados, de todos os escopos de importação especificados pelas chamadas anteriores para IMetaDataEmit::Merge
, no 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 dos metadados no escopo de importação.
Nenhuma propriedade existente em todo o módulo é substituída.
Se as propriedades do módulo já tiverem sido definidas para o escopo atual, nenhuma delas será importada. No entanto, se elas não tiverem sido definidas no escopo atual, serão importadas somente 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. Os objetosTypeDef
são verificados quanto a duplicatas em relação a cada nome de objeto totalmente qualificado + GUID + número de versão. Se houver uma correspondência de 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, oMergeEnd
fará uma verificação superficial para garantir que as entradas sejam realmente duplicatas. Se não forem, um erro será gerado. Esta verificação superficial procura:As mesmas declarações de membro, ocorrendo na mesma ordem. Os membros sinalizados como
mdPrivateScope
(veja a enumeração CorMethodAttr) não estão incluídos nesta verificação, pois são mesclados de maneira especial.O mesmo layout de classe.
Isso significa que um objeto
TypeDef
deve sempre ser definido de maneira completa e consistente em cada escopo de metadados em que é declarado. Se as implementações de membros (para uma classe) estiverem espalhadas por muitas unidades de compilação, supõe-se que a definição completa esteja presente em todos os escopos e não de maneira incremental em cada um deles. Por exemplo, se os nomes dos parâmetros forem relevantes para o contrato, eles deverão ser emitidos da mesma maneira em todos os escopos. Se não forem relevantes, não deverão ser emitidos em metadados.A exceção é que um objeto
TypeDef
pode ter membros incrementais sinalizados comomdPrivateScope
. Ao encontrar esses membros, oMergeEnd
os adiciona incrementalmente ao escopo atual sem considerar duplicatas. Como o compilador entende o escopo privado, ele 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 reemita essas informações.
Os atributos personalizados são mesclados somente quando o item ao qual estão anexados é mesclado. Por exemplo, os atributos personalizados associados a uma classe são mesclados quando ela é encontrada pela primeira vez. Se os atributos personalizados estiverem associados a um
TypeDef
ouMemberDef
específico da unidade de compilação (como o carimbo de data/hora de uma compilação de membro), eles não serão mesclados e caberá ao compilador remover ou atualizar esses metadados.
Requisitos
Plataformas: confira Requisitos do sistema.
Cabeçalho: Cor.h
Biblioteca: usada como um recurso em MSCorEE.dll
Versões do .NET Framework: disponíveis a partir da 1.1