运行时指令策略设置

.NET Native 的运行时指令策略设置决定在运行时间类型和类型成员的元数据的可用性。 如果没有必要的元数据,依赖于反射、序列化和反序列化的操作或 .NET 框架类型到 COM 的封送或 Windows 运行时会失败并引发一个异常。 最常见的异常是 MissingMetadataException 和(在互操作的情况下)MissingInteropDataException

运行时策略设置是由一个运行时指令 (.rd.xml) 文件控制的。 每个运行时指令为特定的程序元素定义策略,比如程序集( 元素)、类型( 元素)、或方法( 元素)。 指令包括一个或多个用于定义反射策略类型、序列化策略类型和互操作策略类型的特性,这些将在下一部分讨论到。 该特性的值定义策略设置。

策略类型

运行时指令文件可识别三类策略类型:反射、序列化和互操作。

策略设置

每个策略类型都可设置为以下表格中列出的一个值。 注意,代表类型成员的元素支持一组不同的策略设置,而不支持其他元素。

策略设置 说明 AssemblyNamespaceTypeTypeInstantiation 元素 EventFieldMethodMethodInstantiationProperty 元素
All 为 .NET Native 工具链未删除的所有类型和成员启用策略。
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 要求工具链在不管所有类型是否受到占用情况下都保留它们,并为它们启用策略。

请参阅