Configuración de directiva de la directiva en tiempo de ejecución

La configuración de directiva de la directiva en tiempo de ejecución de .NET Native determina la disponibilidad de los metadatos de los tipos y miembros de tipo en tiempo de ejecución. Sin los metadatos necesarios, las operaciones que se basan en la reflexión, la serialización y la deserialización o el cálculo de referencias de tipos de .NET Framework a COM o Windows en tiempo de ejecución pueden producir errores y generar una excepción. Las excepciones más comunes son MissingMetadataException y, en el caso de la interoperabilidad, MissingInteropDataException.

La configuración de la directiva en tiempo de ejecución se controla mediante un archivo de directivas en tiempo de ejecución (.rd.xml). Cada directiva en tiempo de ejecución define la directiva para un elemento de programa determinado, como un ensamblado (el <elemento Assembly>), un tipo (el< elemento Type>) o un método (el <elemento Method>). La directiva incluye uno o más atributos que definen los tipos de directivas de reflexión, los tipos de directivas de serialización y los tipos de directiva de interoperabilidad descritos en la siguiente sección. El valor del atributo define la configuración de directiva.

Tipo de directivas

Los archivos de directivas en tiempo de ejecución reconocen tres categorías de tipos de directivas: reflexión, serialización e interoperabilidad.

  • Los tipos de directiva de reflexión determinan los metadatos que van a estar disponibles en tiempo de ejecución para la reflexión:

    • Activate controla el acceso en tiempo de ejecución a los constructores para permitir la activación de instancias.

    • Browse controla la consulta para obtener información sobre los elementos del programa.

    • Dynamic controla el acceso en tiempo de ejecución a todos los tipos y miembros para permitir la programación dinámica.

    En la siguiente tabla se recogen los tipos de directivas de reflexión y los elementos de programa con los que se pueden usar.

    Elemento Activar Examinar Dinámica
    <Aplicación> ✔️ ✔️ ✔️
    <Ensamblado> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <Evento> ✔️ ✔️
    <Campo> ✔️ ✔️
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <Método> ✔️ ✔️
    <MethodInstantiation> ✔️ ✔️
    <Espacio de nombres> ✔️ ✔️ ✔️
    <Parámetro> ✔️ ✔️ ✔️
    <Propiedad> ✔️ ✔️
    <Subtipos> ✔️ ✔️ ✔️
    <Tipo> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️
  • Los tipos de directivas de serialización determinan los metadatos que van a estar disponibles en tiempo de ejecución para la serialización y deserialización:

    • Serialize controla el acceso en tiempo de ejecución a constructores, campos y propiedades para permitir que bibliotecas de terceros como el serializador JSON Newtonsoft puedan serializar instancias de tipo.

    • DataContractSerializer controla el acceso en tiempo de ejecución a constructores, campos y propiedades para permitir que la clase DataContractSerializer pueda serializar instancias de tipo.

    • DataContractJsonSerializer controla el acceso en tiempo de ejecución a constructores, campos y propiedades para permitir que la clase DataContractJsonSerializer pueda serializar instancias de tipo.

    • XmlSerializer controla el acceso en tiempo de ejecución a constructores, campos y propiedades para permitir que la clase XmlSerializer pueda serializar instancias de tipo.

    En la siguiente tabla se muestran los tipos de directivas de serialización y los elementos de programa con los que se pueden usar.

    Elemento Serializar DataContractSerializer DataContractJsonSerializer XmlSerializer
    <Aplicación> ✔️ ✔️ ✔️ ✔️
    <Ensamblado> ✔️ ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️ ✔️
    <Evento>
    <Campo> ✔️
    <GenericParameter> ✔️ ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️ ✔️
    <Método>
    <MethodInstantiation>
    <Espacio de nombres> ✔️ ✔️ ✔️ ✔️
    <Parámetro> ✔️ ✔️ ✔️ ✔️
    <Propiedad> ✔️
    <Subtipos> ✔️ ✔️ ✔️ ✔️
    <Tipo> ✔️ ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️ ✔️
  • Los tipos de directivas de interoperabilidad determinan los metadatos que van a estar disponibles en tiempo de ejecución para pasar punteros de función, tipos de valor y tipos de referencias a COM y a Windows en tiempo de ejecución:

    • MarshalObject controla el cálculo de referencias nativo a COM y a Windows en tiempo de ejecución para los tipos de referencia.

    • MarshalDelegate controla el cálculo de referencias nativo de tipos de delegado como punteros de función.

    • MarshalStructure controla el cálculo de referencias nativo a COM y a Windows en tiempo de ejecución para los tipos de valor.

    En la siguiente tabla se enumeran los tipos de directivas de interoperabilidad y los elementos de programa con los que se pueden usar.

    Elemento MarshalObject MarshalDelegate MarshalStructure
    <Aplicación> ✔️ ✔️ ✔️
    <Ensamblado> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <Evento>
    <Campo>
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <Método>
    <MethodInstantiation>
    <Espacio de nombres> ✔️ ✔️ ✔️
    <Parámetro> ✔️ ✔️ ✔️
    <Propiedad>
    <Subtipos> ✔️ ✔️ ✔️
    <Tipo> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️

Configuración de directiva

Cada tipo de directiva se puede establecer en uno de los valores incluidos en la siguiente tabla. Tenga en cuenta que los elementos que representan miembros de tipo admiten un conjunto diferente de opciones de directiva que otros elementos.

Configuración de directiva Descripción Elementos Assembly, Namespace, Type y TypeInstantiation Elementos Event, Field, Method, MethodInstantiation y Property
All Habilita la directiva para todos los tipos y miembros que la cadena de herramientas de .NET Native no elimina. ✔️
Auto Especifica que se debe usar la directiva predeterminada para el tipo de directiva de ese elemento de programa. Esto es exactamente lo mismo que omitir una directiva para ese tipo de directiva. Auto se suele usar para indicar que la directiva se hereda de un elemento primario. ✔️ ✔️
Excluded Especifica que la directiva está deshabilitada para un determinado elemento del programa. Por ejemplo, la directiva en tiempo de ejecución:

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

especifica que no hay metadatos de la clase BusinessClasses.Person disponibles para examinarlos o para crear una instancia de objetos Person y modificarlos dinámicamente.
✔️ ✔️
Included Habilita una directiva si hay metadatos disponibles para el tipo primario. ✔️
Public Habilita la directiva para miembros o tipos públicos, a menos que la cadena de herramientas determine que el tipo o miembro no es necesario y, por tanto, lo quite. Esta configuración difiere de Required Public, lo que garantiza que siempre va a haber metadatos disponibles para miembros y tipos públicos, aun cuando la cadena de herramientas determine que no son necesarios. ✔️
PublicAndInternal Habilita la directiva para miembros o tipos públicos e internos, a menos que la cadena de herramientas determine que el tipo o miembro no es necesario y, por tanto, lo quite. Este parámetro difiere de Required PublicAndInternal, lo que garantiza que siempre va a haber metadatos disponibles para miembros y tipos públicos e internos, aun cuando la cadena de herramientas determine que no son necesarios. ✔️
Required Especifica que la directiva para un miembro está habilitada y que va a haber metadatos disponibles incluso cuando parezca que el miembro está en uso. ✔️
Required Public Habilita la directiva para los miembros y tipos públicos y garantiza que siempre va a haber metadatos disponibles para los miembros y tipos públicos. Este parámetro difiere de Public, lo que hace que solo haya metadatos disponibles para miembros y tipos públicos cuando la cadena de herramientas determine que son necesarios. ✔️
Required PublicAndInternal Habilita la directiva para miembros o tipos públicos e internos y garantiza que siempre va a haber metadatos disponibles para los miembros y tipos públicos e internos. Este parámetro difiere de PublicAndInternal, lo que hace que solo haya metadatos disponibles para miembros y tipos públicos e internos cuando la cadena de herramientas determine que son necesarios. ✔️
Required All Requiere que la cadena de herramientas conserve todos los tipos y miembros (se usen o no) y habilita la directiva para estos. ✔️

Consulte también