IMetaDataEmit::MergeEnd Method

Объединяется в текущую область всех областей метаданных, указанных одним или несколькими предыдущими вызовами IMetaDataEmit::Merge.

Syntax

HRESULT MergeEnd ();

Parameters

Этот метод не принимает параметров.

Remarks

Эта подпрограмма активирует фактическое слияние метаданных всех областей импорта, заданных предыдущими вызовами IMetaDataEmit::Mergeв текущую область вывода.

К слиянию применяются следующие особые условия:

  • Идентификатор версии модуля (MVID) никогда не импортируется, так как он является уникальным для метаданных в области импорта.

  • Существующие свойства на уровне модуля не перезаписываются.

    Если свойства модуля уже заданы для текущей области, свойства модуля не импортируются. Однако если свойства модуля не были заданы в текущей области, они импортируются только один раз при первом обнаружении. Если эти свойства модуля встречаются снова, они дублируются. Если сравниваются значения всех свойств модуля (за исключением MVID), а дубликаты не найдены, возникает ошибка.

  • Для определений типов (TypeDef) дубликаты не объединяются в текущую область. TypeDefобъекты проверяются на наличие дубликатов по каждому полному номеруверсииGUID объекта. + + Если имеется совпадение по имени или GUID, а любой из остальных двух элементов отличается, возникает ошибка. В противном случае, если все три элемента совпадают, MergeEnd выполняется курсорная проверка, чтобы убедиться, что записи действительно дублируются; если нет, возникает ошибка. Эта курсорная проверка ищет следующее:

    • Те же объявления членов, которые происходят в том же порядке. Элементы, помеченные как mdPrivateScope (см. перечисление CorMethodAttr ), не включены в эту проверку; они объединяются специально.

    • Тот же макет класса.

    Это означает, что объект всегда должен быть полностью и последовательно определен в каждой области метаданных, в которой она объявлена; если ее реализации-члены (для класса) распределяются по нескольким единицам компиляции, предполагается, что TypeDef полное определение будет присутствовать в каждой области и не добавочно к каждой области. Например, если имена параметров относятся к контракту, они должны создаваться одинаково в каждой области; Если они не являются релевантными, их не следует выдавать в метаданные.

    Исключением является то, что TypeDef объект может иметь добавочные члены, помеченные как mdPrivateScope. При обнаружении этих MergeEnd добавочно добавляет их в текущую область без учета дубликатов. Так как компилятор понимает частную область, компилятор должен отвечать за соблюдение правил.

  • Относительные виртуальные адреса (RVAs) не импортируются или не объединяются; Ожидается, что компилятор повторно выдает эти сведения.

  • Пользовательские атрибуты объединяются только в том случае, если элемент, к которому они присоединены. Например, пользовательские атрибуты, связанные с классом, объединяются при первом обнаружении класса. Если пользовательские атрибуты связаны с единицей TypeDef компиляции или MemberDef не зависят от единицы компиляции (например, метки времени компиляции элемента), они не объединяются, и компилятору не нужно удалять или обновлять такие метаданные.

Requirements

Платформ: См. сведения о поддерживаемых операционных системах .NET.

Header: Cor.h

Library: CorGuids.lib

See also