Метод 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