Поделиться через


MetadataLoadContext.CoreAssembly Свойство

Определение

Возвращает или задает сборку, которая обозначает "систему сборки", вмещающую хорошо известные типы, такие как Int32.

public:
 property System::Reflection::Assembly ^ CoreAssembly { System::Reflection::Assembly ^ get(); };
public System.Reflection.Assembly? CoreAssembly { get; }
member this.CoreAssembly : System.Reflection.Assembly
Public ReadOnly Property CoreAssembly As Assembly

Значение свойства

Экземпляр Assembly.

Комментарии

Базовая сборка обрабатывается иначе, чем другие сборки, так как ссылки на эти известные типы не включают ссылку на сборку, в отличие от обычных типов.

Как правило, эта сборка называется mscorlib или netstandard. Если не удается найти базовую сборку, значение будет равно null, а многие другие методы отражения, включая методы, которые анализируют сигнатуры методов, вызовет исключение.

Определяется CoreAssembly путем передачи coreAssemblyName параметра, переданного конструктору MetadataAssemblyResolver в MetadataAssemblyResolver.Resolve метод .

coreAssemblyName Если в конструкторе MetadataLoadContextне указан аргумент , то используются значения по умолчанию, включая mscorlib, System.Runtime и netstandard.

Назначенная базовая сборка не должна содержать типы ядер напрямую. Он может ввести их в другие сборки. Таким образом, вполне допустимо использовать фасад mscorlib в качестве назначенной основной сборки.

Обратите внимание, что System.Runtime не является идеальной основной сборкой, так как она исключает некоторые псевдо-пользовательские типы атрибутов, связанные с взаимодействием, такие как DllImportAttribute. Однако он может служить, если вы не заинтересованы в этих атрибутах. API CustomAttributes пропустит эти атрибуты, если базовая сборка не включает необходимые типы.

Базовая сборка не загружается до тех пор, пока это не потребуется. Следующие API не активируют поиск основной сборки:

Если базовую сборку не удается найти или в ней отсутствуют типы, это повлияет на поведение MetadataLoadContext следующим образом:

  • ИНТЕРФЕЙСы API, которые должны анализировать сигнатуры или typepecs и возвращать результаты в виде Type объектов, будут вызывать исключение. Пример:

  • API- интерфейсы, которым необходимо сравнивать типы с известными типами ядра, не будут вызывать исключение, и сравнение будет оцениваться как false. Например, если не указать базовую сборку, IsPrimitive возвращается false для всех типов, даже для типов с именем Int32. Точно так же будет Type.GetTypeCode возвращать Object для всего.

  • Если сущность метаданных задает флаги, которые отображаются как псевдо-настраиваемый атрибут, а базовая сборка не содержит псевдо-настраиваемый тип атрибута, необходимый конструктор или любой из типов параметров конструктора MetadataLoadContext , то исключение не будет выдаваться. Псевдо-настраиваемый атрибут будет опущен из списка возвращаемых атрибутов.

Применяется к