Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Объединяется в текущую область всех областей метаданных, указанных одним или несколькими предыдущими вызовами 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