Share via


Paramètres de stratégie de directive runtime

Les paramètres de stratégie des directives runtime pour .NET Native déterminent la disponibilité des métadonnées pour les types et les membres de type au moment de l'exécution. Sans les métadonnées nécessaires, les opérations qui reposent sur la réflexion, la sérialisation, la désérialisation ou le marshaling de types .NET Framework vers COM ou Windows Runtime peuvent échouer et lever une exception. Les exceptions les plus courantes sont MissingMetadataException et, dans le cas de l’interopérabilité, MissingInteropDataException.

Les paramètres de stratégie runtime sont contrôlés par un fichier de directives runtime (.rd.xml). Chaque directive runtime définit une stratégie pour un élément de programme particulier, tel qu’un assembly (l’élément <Assembly> ), un type (l’élément <Type> ) ou une méthode (élément <Method> ). La directive inclut un ou plusieurs attributs qui définissent les types de stratégie de réflexion, les types de stratégie de sérialisation et les types de stratégie d'interopérabilité décrits dans la section suivante. La valeur de l'attribut définit le paramètre de stratégie.

Types de stratégie

Les fichiers de directives runtime reconnaissent trois catégories de types de stratégie : réflexion, sérialisation et interopérabilité.

  • Les types de stratégie de réflexion déterminent les métadonnées mises à disposition au moment de l'exécution pour la réflexion :

    • Activate contrôle l'accès aux constructeurs, pour permettre l'activation d'instances au moment de l'exécution.

    • Browse contrôle la demande d'informations sur les éléments de programme.

    • Dynamic contrôle l'accès à tous les types et membres au moment de l'exécution pour autoriser la programmation dynamique.

    Le tableau suivant répertorie les types de stratégie de réflexion et les éléments de programme avec lesquels ils peuvent être utilisés.

    Élément Activer Parcourir Dynamique
    <Application> ✔️ ✔️ ✔️
    <Assembly> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <Événement> ✔️ ✔️
    <Champ> ✔️ ✔️
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <Méthode> ✔️ ✔️
    <MethodInstantiation> ✔️ ✔️
    <Noms> ✔️ ✔️ ✔️
    <Paramètre> ✔️ ✔️ ✔️
    <Propriété> ✔️ ✔️
    <Sous-types> ✔️ ✔️ ✔️
    <Type> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️
  • Les types de stratégie de sérialisation déterminent les métadonnées mises à disposition au moment de l’exécution pour la sérialisation et la désérialisation :

    • Serialize contrôle l'accès au moment de l'exécution aux constructeurs, champs et propriétés, pour permettre la sérialisation des instances de types par des bibliothèques tierces comme le sérialiseur JSON Newtonsoft.

    • DataContractSerializer contrôle l'accès aux constructeurs, aux champs et aux propriétés au moment de l'exécution, pour permettre aux instances de type d'être sérialisées par la classe DataContractSerializer.

    • DataContractJsonSerializer contrôle l'accès aux constructeurs, aux champs et aux propriétés au moment de l'exécution, pour permettre aux instances de type d'être sérialisées par la classe DataContractJsonSerializer.

    • XmlSerializer contrôle l'accès aux constructeurs, aux champs et aux propriétés au moment de l'exécution, pour permettre aux instances de type d'être sérialisées par la classe XmlSerializer.

    Le tableau suivant répertorie les types de stratégie de sérialisation et les éléments de programme avec lesquels ils peuvent être utilisés.

    Élément Sérialisation DataContractSerializer DataContractJsonSerializer XmlSerializer
    <Application> ✔️ ✔️ ✔️ ✔️
    <Assembly> ✔️ ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️ ✔️
    <Événement>
    <Champ> ✔️
    <GenericParameter> ✔️ ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️ ✔️
    <Méthode>
    <MethodInstantiation>
    <Noms> ✔️ ✔️ ✔️ ✔️
    <Paramètre> ✔️ ✔️ ✔️ ✔️
    <Propriété> ✔️
    <Sous-types> ✔️ ✔️ ✔️ ✔️
    <Type> ✔️ ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️ ✔️
  • Les types de stratégie d'interopérabilité déterminent les métadonnées mises à disposition au moment de l'exécution pour passer des types de référence, des types de valeur et des pointeurs de fonction à COM et Windows Runtime :

    • MarshalObject contrôle le marshaling natif vers COM et Windows Runtime pour les types de référence.

    • MarshalDelegate contrôle le marshaling natif de types de délégué en tant que pointeurs de fonction.

    • MarshalStructure contrôle le marshaling natif vers COM et Windows Runtime pour les types de valeur.

    Le tableau suivant répertorie les types de stratégie d'interopérabilité et les éléments de programme avec lesquels ils peuvent être utilisés.

    Élément MarshalObject MarshalDelegate MarshalStructure
    <Application> ✔️ ✔️ ✔️
    <Assembly> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <Événement>
    <Champ>
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <Méthode>
    <MethodInstantiation>
    <Noms> ✔️ ✔️ ✔️
    <Paramètre> ✔️ ✔️ ✔️
    <Propriété>
    <Sous-types> ✔️ ✔️ ✔️
    <Type> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️

Paramètres de stratégie

Chaque type de stratégie peut être défini sur l'une des valeurs répertoriées dans le tableau suivant. Notez que les éléments qui représentent les membres de type ne prennent pas en charge le même jeu de paramètres de stratégie que les autres éléments.

Paramètre de stratégie Description Éléments Assembly, Namespace, Type et TypeInstantiation Éléments Event, Field, Method, MethodInstantiation et Property
All Active la stratégie pour tous les types et membres non supprimés par la chaîne d'outils .NET Native. ✔️
Auto Spécifie que la stratégie par défaut doit être utilisée pour le type de stratégie pour cet élément de programme. Cela revient à omettre une stratégie pour ce type de stratégie. Auto sert généralement à indiquer que la stratégie est héritée d'un élément parent. ✔️ ✔️
Excluded Spécifie que la stratégie est désactivée pour un élément de programme particulier. Par exemple, la directive runtime :

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

indique que les métadonnées pour la classe BusinessClasses.Person ne sont pas disponibles soit pour parcourir des objets Person, soit pour les instancier et modifier dynamiquement.
✔️ ✔️
Included Active une stratégie si les métadonnées pour le type parent sont disponibles. ✔️
Public Active la stratégie pour les types ou membres publics, sauf si la chaîne d'outils détermine que le type ou membre n'est pas nécessaire et donc le supprime. Ce paramètre est différent de Required Public, qui garantit que les métadonnées pour les membres et types publics sont toujours disponibles, même si la chaîne d'outils détermine qu'elles sont superflues. ✔️
PublicAndInternal Active la stratégie pour les types ou membres publics et internes, sauf si la chaîne d'outils détermine que le type ou membre n'est pas nécessaire et donc le supprime. Ce paramètre est différent de Required PublicAndInternal, qui garantit que les métadonnées pour les membres et types publics et internes sont toujours disponibles, même si la chaîne d'outils détermine qu'elles sont superflues. ✔️
Required Spécifie que la stratégie pour un membre est activée et que les métadonnées seront disponibles même si le membre semble utilisé. ✔️
Required Public Active la stratégie pour les types ou membres publics et garantit que les métadonnées pour les types et membres publics sont toujours disponibles. Ce paramètre est différent de Public, qui ne garantit la disponibilité des métadonnées pour les types et membres publics que si la chaîne d'outils détermine qu'elles sont nécessaires. ✔️
Required PublicAndInternal Active la stratégie pour les types ou membres publics et internes et garantit que les métadonnées pour les types et membres publics et internes sont toujours disponibles. Ce paramètre est différent de PublicAndInternal, qui ne garantit la disponibilité des métadonnées pour les types et membres publics et internes que si la chaîne d'outils détermine qu'elles sont nécessaires. ✔️
Required All Oblige la chaîne d'outils à conserver tous les types et membres, qu'ils soient utilisés ou non, et active la stratégie pour eux. ✔️

Voir aussi