Параметры политики директив среды выполнения
Параметры политики директив среды выполнения для машинного кода .NET определяют доступность метаданных для типов и членов типов во время выполнения. Без необходимых метаданных операции, зависящие от отражения, сериализации и десериализации или маршалинга типов платформы .NET Framework в COM или среду выполнения Windows, могут быть не выполнены, в результате чего создается исключение. Наиболее общие исключения, MissingMetadataException и (в случае взаимодействия) MissingInteropDataException.
Параметры политики среды выполнения управляются файлом директив среды выполнения (. rd.xml). Каждая директива среды выполнения определяет политику для определенного элемента программы, например сборки (элемент Assembly>), типа (<<элемент Type>) или метода (<элемент Method).> Директива включает один или несколько атрибутов, которые определяют типы политики отражения, типы политик сериализации и типы политик взаимодействия, описанных в следующем разделе. Значение атрибута определяет параметр политики.
Типы политик
Файлы директив среды выполнения распознают три типа политик: отражение, сериализация и взаимодействие.
Типы политики отражения определяют, какие метаданные доступны во время выполнения для отражения:
Activate
управляет доступом среды выполнения к конструкторам для включения активации экземпляров.Browse
управляет запросами информации о программных элементах.Dynamic
управляет доступом среды выполнения ко всем типам и членам для включения динамического программирования.
В следующей таблице перечислены типы политики отражения, а также программные элементы, с которыми они могут использоваться.
Элемент Активировать Просмотреть Динамический <Приложение> ✔️ ✔️ ✔️ <Сборка> ✔️ ✔️ ✔️ <AttributeImplies> ✔️ ✔️ ✔️ <Событие> ✔️ ✔️ <Поле> ✔️ ✔️ <GenericParameter> ✔️ ✔️ ✔️ <ImpliesType> ✔️ ✔️ ✔️ <Method> ✔️ ✔️ <MethodInstantiation> ✔️ ✔️ <Пространство имен> ✔️ ✔️ ✔️ <Параметр> ✔️ ✔️ ✔️ <Свойство> ✔️ ✔️ <Подтипов> ✔️ ✔️ ✔️ <Тип> ✔️ ✔️ ✔️ <TypeInstantiation> ✔️ ✔️ ✔️ <TypeParameter> ✔️ ✔️ ✔️ Типы политики сериализации определяют, какие метаданные доступны во время выполнения для сериализации и десериализации:
Serialize
управляет доступом среды выполнения к конструкторам, полям и свойствам, позволяющим сериализовать и десериализовать экземпляры типа с помощью таких библиотек сторонних поставщиков, как сериализатор Newtonsoft JSON.DataContractSerializer
управляет доступом среды выполнения к конструкторам, полям и свойствам, чтобы включить сериализацию экземпляров типов с помощью класса DataContractSerializer.DataContractJsonSerializer
управляет доступом среды выполнения к конструкторам, полям и свойствам, чтобы включить сериализацию экземпляров типов с помощью класса DataContractJsonSerializer.XmlSerializer
управляет доступом среды выполнения к конструкторам, полям и свойствам, чтобы включить сериализацию экземпляров типов с помощью класса XmlSerializer.
В следующей таблице перечислены типы политики сериализации, а также программные элементы, с которыми они могут использоваться.
Элемент Сериализация DataContractSerializer DataContractJsonSerializer XmlSerializer <Приложение> ✔️ ✔️ ✔️ ✔️ <Сборка> ✔️ ✔️ ✔️ ✔️ <AttributeImplies> ✔️ ✔️ ✔️ ✔️ <Событие> <Поле> ✔️ <GenericParameter> ✔️ ✔️ ✔️ ✔️ <ImpliesType> ✔️ ✔️ ✔️ ✔️ <Method> <MethodInstantiation> <Пространство имен> ✔️ ✔️ ✔️ ✔️ <Параметр> ✔️ ✔️ ✔️ ✔️ <Свойство> ✔️ <Подтипов> ✔️ ✔️ ✔️ ✔️ <Тип> ✔️ ✔️ ✔️ ✔️ <TypeInstantiation> ✔️ ✔️ ✔️ ✔️ <TypeParameter> ✔️ ✔️ ✔️ ✔️ Типы политики взаимодействия определяют, какие метаданные доступны во время выполнения для передачи ссылочных типов, типов значений и указателей функций в COM и среду выполнения Windows:
MarshalObject
управляет внутренним маршалингом в COM и среду выполнения Windows для ссылочных типов.MarshalDelegate
управляет внутренним маршалингом типов делегатов в качестве указателей функций.MarshalStructure
управляет внутренним маршалингом в COM и среду выполнения Windows для типов значений.
В следующей таблице перечислены типы политики взаимодействия, а также программные элементы, с которыми они могут использоваться.
Элемент MarshalObject MarshalDelegate MarshalStructure <Приложение> ✔️ ✔️ ✔️ <Сборка> ✔️ ✔️ ✔️ <AttributeImplies> ✔️ ✔️ ✔️ <Событие> <Поле> <GenericParameter> ✔️ ✔️ ✔️ <ImpliesType> ✔️ ✔️ ✔️ <Method> <MethodInstantiation> <Пространство имен> ✔️ ✔️ ✔️ <Параметр> ✔️ ✔️ ✔️ <Свойство> <Подтипов> ✔️ ✔️ ✔️ <Тип> ✔️ ✔️ ✔️ <TypeInstantiation> ✔️ ✔️ ✔️ <TypeParameter> ✔️ ✔️ ✔️
Параметры политики
Каждый типу политики может быть задано одно из значений, перечисленных в следующей таблице. Обратите внимание, что элементы, представляющие члены типов поддерживают иной набор параметров политики, чем другие элементы.
Параметр политики | Description | Элементы 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 |
Требует, чтобы цепочка инструментов сохранила все типы и члены, независимо то того, используются они или нет, и включает политику для них. | ✔️ |