Partager via


Scénarios principaux de Reflection Emit

Reflection Emit prend en charge un seul scénario principal : un module dynamique défini dans un assembly dynamique. Un module dynamique créé dans un assembly dynamique peut être transitoire ou persistable.

Restrictions sur les références de type

Les assemblys peuvent référencer des types définis dans un autre assembly. Un assembly dynamique transitoire peut référencer en toute sécurité des types définis dans un autre assembly dynamique transitoire, un assembly dynamique persistable ou un assembly statique. Cependant, le Common Language Runtime ne permet pas à un module dynamique persistable de référencer un type défini dans un module dynamique transitoire. En effet, lorsque le module dynamique rendu persistant est chargé après avoir été enregistré sur le disque, le runtime ne peut pas résoudre les références à des types définis dans le module dynamique transitoire.

Restrictions sur l'émission vers des domaines d'application distants

Certains scénarios requièrent qu'un assembly dynamique soit créé et exécuté dans un domaine d'application distant. Reflection Emit ne permet pas à un assembly dynamique d'être émis directement vers un domaine d'application distant. La solution consiste à émettre l'assembly dynamique dans le domaine d'application en cours, d'enregistrer l'assembly dynamique émis sur le disque, puis de charger l'assembly dynamique dans le domaine d'application distant.

Modes d'accès des assemblys dynamiques

Les assemblys dynamiques peuvent être créés en utilisant l'un des modes d'accès suivants :

  • Run

    L'assembly dynamique représenté par un AssemblyBuilder est transitoire. L'assembly dynamique peut seulement être utilisé pour exécuter le code émis.

  • Save

    L'assembly dynamique représenté par un AssemblyBuilder est persistable mais ne peut pas être exécuté tant que le fichier exécutable portable (PE, Portable Executable) enregistré n'est pas chargé à partir du disque.

  • RunAndSave

    L'assembly dynamique représenté par un AssemblyBuilder est persistable mais peut aussi être exécuté avant et/ou après l'enregistrement de l'assembly sur le disque.

Le mode d'accès doit être spécifié lorsque l'assembly dynamique est défini et ne peut pas être modifié par la suite. Le runtime utilise le mode d'accès d'un assembly dynamique pour optimiser la représentation interne de l'assembly.

Voir aussi

Scénarios Reflection Emit