Метод IMetaDataEmit::MergeEnd

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

Синтаксис

HRESULT MergeEnd ();

Параметры

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

Комментарии

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

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

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

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

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

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

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

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

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

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

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

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

Требования

Платформы: см. раздел Требования к системе.

Заголовка: Cor.h

Библиотека: Используется в качестве ресурса в MSCorEE.dll

платформа .NET Framework версии: доступно с версии 1.1

См. также раздел