Параметры политики директив среды выполнения

Параметры политики директив среды выполнения для машинного кода .NET определяют доступность метаданных для типов и членов типов во время выполнения. Без необходимых метаданных операции, зависящие от отражения, сериализации и десериализации или маршалинга типов платформы .NET Framework в COM или среду выполнения Windows, могут быть не выполнены, в результате чего создается исключение. Наиболее общие исключения, MissingMetadataException и (в случае взаимодействия) MissingInteropDataException.

Параметры политики среды выполнения управляются файлом директив среды выполнения (. rd.xml). Каждая директива среды выполнения определяет политику для определенного программного элемента, например сборки ( <элемент Assembly> ), типа ( <элемент Type> ) или метода ( <элемент Method> ). Директива включает один или несколько атрибутов, которые определяют типы политики отражения, типы политик сериализации и типы политик взаимодействия, описанных в следующем разделе. Значение атрибута определяет параметр политики.

Типы политик

Файлы директив среды выполнения распознают три типа политик: отражение, сериализация и взаимодействие.

  • Типы политики отражения определяют, какие метаданные доступны во время выполнения для отражения:

    • Activate управляет доступом среды выполнения к конструкторам для включения активации экземпляров.

    • Browse управляет запросами информации о программных элементах.

    • Dynamic управляет доступом среды выполнения ко всем типам и членам для включения динамического программирования.

    В следующей таблице перечислены типы политики отражения, а также программные элементы, с которыми они могут использоваться.

    Элемент Активировать Просмотреть Динамический
    <Приложение> ✔️ ✔️ ✔️
    <Сборка> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <Событие> ✔️ ✔️
    <Поле> ✔️ ✔️
    <универсальный параметр;> ✔️ ✔️ ✔️
    <Предполагаемая типы> ✔️ ✔️ ✔️
    <Метод> ✔️ ✔️
    <MethodInstantiation> ✔️ ✔️
    <Пространства имен> ✔️ ✔️ ✔️
    <Параметр> ✔️ ✔️ ✔️
    <Свойство> ✔️ ✔️
    <Подтипов> ✔️ ✔️ ✔️
    <Тип> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️
  • Типы политики сериализации определяют, какие метаданные доступны во время выполнения для сериализации и десериализации:

    • Serialize управляет доступом среды выполнения к конструкторам, полям и свойствам, позволяющим сериализовать и десериализовать экземпляры типа с помощью таких библиотек сторонних поставщиков, как сериализатор Newtonsoft JSON.

    • DataContractSerializer управляет доступом среды выполнения к конструкторам, полям и свойствам, чтобы включить сериализацию экземпляров типов с помощью класса DataContractSerializer.

    • DataContractJsonSerializer управляет доступом среды выполнения к конструкторам, полям и свойствам, чтобы включить сериализацию экземпляров типов с помощью класса DataContractJsonSerializer.

    • XmlSerializer управляет доступом среды выполнения к конструкторам, полям и свойствам, чтобы включить сериализацию экземпляров типов с помощью класса XmlSerializer.

    В следующей таблице перечислены типы политики сериализации, а также программные элементы, с которыми они могут использоваться.

    Элемент Сериализация DataContractSerializer DataContractJsonSerializer XmlSerializer
    <Приложение> ✔️ ✔️ ✔️ ✔️
    <Сборка> ✔️ ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️ ✔️
    <Событие>
    <Поле> ✔️
    <универсальный параметр;> ✔️ ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️ ✔️
    <Метод>
    <MethodInstantiation>
    <Пространства имен> ✔️ ✔️ ✔️ ✔️
    <Параметр> ✔️ ✔️ ✔️ ✔️
    <Свойство> ✔️
    <Подтипов> ✔️ ✔️ ✔️ ✔️
    <Тип> ✔️ ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️ ✔️
  • Типы политики взаимодействия определяют, какие метаданные доступны во время выполнения для передачи ссылочных типов, типов значений и указателей функций в COM и среду выполнения Windows:

    • MarshalObject управляет внутренним маршалингом в COM и среду выполнения Windows для ссылочных типов.

    • MarshalDelegate управляет внутренним маршалингом типов делегатов в качестве указателей функций.

    • MarshalStructure управляет внутренним маршалингом в COM и среду выполнения Windows для типов значений.

    В следующей таблице перечислены типы политики взаимодействия, а также программные элементы, с которыми они могут использоваться.

    Элемент MarshalObject MarshalDelegate MarshalStructure
    <Приложение> ✔️ ✔️ ✔️
    <Сборка> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <Событие>
    <Поле>
    <универсальный параметр;> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <Метод>
    <MethodInstantiation>
    <Пространства имен> ✔️ ✔️ ✔️
    <Параметр> ✔️ ✔️ ✔️
    <Свойство>
    <Подтипов> ✔️ ✔️ ✔️
    <Тип> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️

Параметры политики

Каждый типу политики может быть задано одно из значений, перечисленных в следующей таблице. Обратите внимание, что элементы, представляющие члены типов поддерживают иной набор параметров политики, чем другие элементы.

Параметр политики Описание Элементы Assembly, Namespace, Type и TypeInstantiation Элементы Event, Field, Method, MethodInstantiation и Property
All Включает политику для всех типов и членов, которые цепочка инструментов машинного кода .NET не удаляет. ✔️
Auto Задает использование политики по умолчанию для типа политики для данного программного элемента. Это аналогично пропуску политики для этого типа политики. Auto обычно используется для указания того, что политика наследуется от родительского элемента. ✔️ ✔️
Excluded Указывает, что политика отключена для определенного программного элемента. Например, директива среды выполнения:

<Type Name="BusinessClasses.Person" Browse="Excluded" Dynamic="Excluded" />

Указывает, что метаданные для класса BusinessClasses.Person недоступны либо для обзора, либо для создания динамического экземпляра и изменения объектов Person.
✔️ ✔️
Included Включает политику, если доступны метаданные для родительского типа. ✔️
Public Включает политику для открытых типов или членов, если только цепочка инструментов не определяет, что тип или член является необязательным и поэтому удаляет его. Этот параметр отличается от Required Public, который гарантирует, что метаданные для открытых типов и членов всегда доступны, даже если цепочка инструментов определяет, что они не нужны. ✔️
PublicAndInternal Включает политику для открытых и внутренних типов или членов, если только цепочка инструментов не определяет, что тип или член является необязательным и поэтому удаляет его. Этот параметр отличается от Required PublicAndInternal, который гарантирует, что метаданные для открытых и внутренних типов и членов всегда доступны, даже если цепочка инструментов определяет, что они не нужны. ✔️
Required Указывает, что политика для члена включена, и эти метаданные будут доступны, даже если член встречается для использования. ✔️
Required Public Включает политику для открытых типов и членов и гарантирует, что эти метаданные для открытых типов и членов всегда доступен. Этот параметр отличается от Public, который делает метаданные для открытых типов и членов доступными, только если цепочка инструментов определяет, что это необходимо. ✔️
Required PublicAndInternal Включает политику для открытых и внутренних типов или членов и гарантирует, что эти метаданные для открытых и внутренних типов и членов всегда доступны. Этот параметр отличается от PublicAndInternal, который делает метаданные для открытых и внутренних типов и членов доступными, только если цепочка инструментов определяет, что это необходимо. ✔️
Required All Требует, чтобы цепочка инструментов сохранила все типы и члены, независимо то того, используются они или нет, и включает политику для них. ✔️

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