AppDomain, classe (System)

Changer de vue:
ScriptFree
Bibliothèque de classes .NET Framework
AppDomain, classe
Cet article a fait l'objet d'une traduction manuelle. Pour afficher simultanément cette page et le contenu source en anglais, choisissez le paramètre d'affichage Basse densité.

Représente un domaine d'application qui est un environnement isolé dans lequel s'exécutent les applications. Cette classe ne peut pas être héritée.

Hiérarchie d'héritage

System.Object
  System.MarshalByRefObject
    System.AppDomain

Espace de noms :  System
Assembly :  mscorlib (dans mscorlib.dll)
Syntaxe

Visual Basic
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class AppDomain _
	Inherits MarshalByRefObject _
	Implements _AppDomain, IEvidenceFactory
C#
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
public sealed class AppDomain : MarshalByRefObject, 
	_AppDomain, IEvidenceFactory
VisualC++
[ClassInterfaceAttribute(ClassInterfaceType::None)]
[ComVisibleAttribute(true)]
public ref class AppDomain sealed : public MarshalByRefObject, 
	_AppDomain, IEvidenceFactory
F#
[<Sealed>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
[<ComVisibleAttribute(true)>]
type AppDomain =  
    class
        inherit MarshalByRefObject
        interface _AppDomain
        interface IEvidenceFactory
    end

Le type AppDomain expose les membres suivants.

Propriétés

  Nom Description
Propriété publique ActivationContext Obtient le contexte d'activation du domaine d'application actuel.
Propriété publique ApplicationIdentity Obtient l'identité de l'application dans le domaine d'application.
Propriété publique ApplicationTrust Obtient des informations qui décrivent les autorisations accordées à une application et indiquent si l'application possède un niveau de confiance qui lui permet de s'exécuter.
Propriété publique BaseDirectory Obtient le répertoire de base qu'utilise le programme de résolution d'assembly pour détecter les assemblys.
Propriété publique Membre statique Pris en charge par XNA Framework CurrentDomain Obtient le domaine d'application actuel pour le Thread en cours.
Propriété publique DomainManager Obtient le gestionnaire de domaine qui a été fourni par l'hôte lorsque le domaine d'application a été initialisé.
Propriété publique DynamicDirectory Obtient le répertoire utilisé par le programme de résolution d'assembly pour détecter les assemblys créés de manière dynamique.
Propriété publique Evidence Obtient le Evidence associé à ce domaine d'application.
Propriété publique Pris en charge par XNA Framework FriendlyName Obtient le nom convivial de ce domaine d'application.
Propriété publique Id Obtient un entier qui identifie de façon unique le domaine d'application au sein du processus.
Propriété publique IsFullyTrusted Obtient une valeur qui indique si les assemblys chargés dans le domaine d'application actuel s'exécutent avec la confiance totale.
Propriété publique IsHomogenous Obtient une valeur qui indique si le domaine d'application actuel dispose d'un jeu d'autorisations accordé à tous les assemblys chargés dans le domaine d'application.
Propriété publique Membre statique MonitoringIsEnabled Obtient ou définit une valeur qui indique si l'analyse de la mémoire et du processeur des domaines d'application est activée pour le processus actuel. Lorsque l'analyse a été activée pour un processus, elle ne peut plus être désactivée.
Propriété publique MonitoringSurvivedMemorySize Obtient le nombre d'octets qui ont survécu à la dernière collection bloquante complète et qui sont référencés par le domaine d'application actuel.
Propriété publique Membre statique MonitoringSurvivedProcessMemorySize Obtient le nombre total d'octets qui ont survécu à la dernière collection bloquante complète pour tous les domaines d'application dans le processus.
Propriété publique MonitoringTotalAllocatedMemorySize Obtient la taille totale, en octets, de toutes les allocations de mémoire effectuées par le domaine d'application depuis sa création, sans soustraire la mémoire collectée.
Propriété publique MonitoringTotalProcessorTime Obtient le temps processeur total utilisé par tous les threads lors de leur exécution dans le domaine d'application actuel, depuis le démarrage du processus.
Propriété publique PermissionSet Obtient le jeu d'autorisations d'un domaine d'application en mode bac à sable (sandbox).
Propriété publique RelativeSearchPath Obtient le chemin d'accès sous le répertoire de base où le programme de résolution d'assembly doit détecter les assemblys privés.
Propriété publique SetupInformation Obtient les informations de configuration du domaine d'application pour cette instance.
Propriété publique ShadowCopyFiles Obtient une indication précisant si le domaine d'application est configuré pour effectuer un cliché instantané des fichiers.
Début
Méthodes

  Nom Description
Méthode publique AppendPrivatePath Obsolète. Ajoute le nom de répertoire spécifié à la liste des chemins d'accès privée.
Méthode publique ApplyPolicy Retourne le nom complet d'assembly après que la stratégie a été appliquée.
Méthode publique ClearPrivatePath Obsolète. Rétablit la chaîne vide ("") comme valeur du chemin d'accès qui spécifie l'emplacement des assemblys privés.
Méthode publique ClearShadowCopyPath Obsolète. Rétablit la chaîne vide ("") comme valeur de la liste des répertoires contenant des clichés instantanés d'assemblys.
Méthode publique CreateComInstanceFrom(String, String) Crée une nouvelle instance d'un type COM spécifié. Les paramètres spécifient le nom d'un fichier qui contient un assembly contenant le type et le nom du type.
Méthode publique CreateComInstanceFrom(String, String, Byte[], AssemblyHashAlgorithm) Crée une nouvelle instance d'un type COM spécifié. Les paramètres spécifient le nom d'un fichier qui contient un assembly contenant le type et le nom du type.
Méthode publique Membre statique Pris en charge par XNA Framework CreateDomain(String) Crée un nouveau domaine d'application portant le nom spécifié.
Méthode publique Membre statique Pris en charge par XNA Framework CreateDomain(String, Evidence) Crée un nouveau domaine d'application portant le nom spécifié à l'aide de la preuve fournie.
Méthode publique Membre statique CreateDomain(String, Evidence, AppDomainSetup) Crée un nouveau domaine d'application à l'aide du nom, de la preuve et des informations de configuration du domaine d'application spécifiés.
Méthode publique Membre statique CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]) Crée un nouveau domaine d'application à l'aide du nom, de la preuve, des informations de configuration du domaine d'application, du jeu d'autorisations par défaut et du tableau d'assemblys ayant un niveau de confiance suffisant.
Méthode publique Membre statique CreateDomain(String, Evidence, String, String, Boolean) Crée un nouveau domaine d'application portant le nom donné, à l'aide de la preuve, du chemin d'accès de base de l'application, du chemin de recherche relatif et d'un paramètre spécifiant si un cliché instantané d'un assembly doit être chargé dans le domaine d'application.
Méthode publique Membre statique CreateDomain(String, Evidence, String, String, Boolean, AppDomainInitializer, String[]) Crée un nouveau domaine d'application portant le nom donné, à l'aide de la preuve, du chemin d'accès de base de l'application, du chemin de recherche relatif et d'un paramètre spécifiant si un cliché instantané d'un assembly doit être chargé dans le domaine d'application. Spécifie une méthode de rappel qui est appelée lorsque le domaine d'application est initialisé, et un tableau d'arguments de type chaîne à passer à la méthode de rappel.
Méthode publique CreateInstance(String, String) Crée une nouvelle instance du type spécifié défini dans l'assembly déterminé.
Méthode publique CreateInstance(String, String, Object[]) Crée une nouvelle instance du type spécifié défini dans l'assembly déterminé. Un paramètre spécifie un tableau d'attributs d'activation.
Méthode publique CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) Crée une nouvelle instance du type spécifié défini dans l'assembly déterminé. Les paramètres spécifient un classeur, des indicateurs de liaisons, des arguments de constructeur, les informations spécifiques à la culture utilisées pour interpréter les arguments et des attributs d'activation facultatifs.
Méthode publique CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) Obsolète. Crée une nouvelle instance du type spécifié défini dans l'assembly déterminé. Les paramètres spécifient un binder, des indicateurs de liaisons, des arguments de constructeur, des informations propres à la culture utilisées pour interpréter les arguments, des attributs d'activation et l'autorisation de créer le type.
Méthode publique CreateInstanceAndUnwrap(String, String) Crée une nouvelle instance du type spécifié. Les paramètres spécifient l'assembly dans lequel le type est défini et le nom du type.
Méthode publique CreateInstanceAndUnwrap(String, String, Object[]) Crée une nouvelle instance du type spécifié. Les paramètres spécifient l'assembly dans lequel le type est défini, le nom du type et un tableau d'attributs d'activation.
Méthode publique CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) Crée une nouvelle instance du type spécifié défini dans l'assembly spécifié, en indiquant si le cas du nom de type est ignoré ; les attributs de liaison et le classeur utilisés pour sélectionner le type à créer ; les arguments du constructeur ; la culture et les attributs d'activation.
Méthode publique CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) Obsolète. Crée une nouvelle instance du type spécifié. Les paramètres spécifient le nom du type et la manière dont il est recherché et créé.
Méthode publique CreateInstanceFrom(String, String) Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé.
Méthode publique CreateInstanceFrom(String, String, Object[]) Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé.
Méthode publique CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé.
Méthode publique CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) Obsolète. Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé.
Méthode publique CreateInstanceFromAndUnwrap(String, String) Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé.
Méthode publique CreateInstanceFromAndUnwrap(String, String, Object[]) Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé.
Méthode publique CreateInstanceFromAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly spécifié, en indiquant si le cas du nom de type est ignoré ; les attributs de liaison et le classeur utilisés pour sélectionner le type à créer ; les arguments du constructeur ; la culture et les attributs d'activation.
Méthode publique CreateInstanceFromAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) Obsolète. Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé.
Méthode publique CreateObjRef Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant. (Hérité de MarshalByRefObject.)
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess) Définit un assembly dynamique avec le nom et le mode d'accès spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>) Définit un assembly dynamique avec le nom, le mode d'accès et les attributs personnalisés spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence) Obsolète. Définit un assembly dynamique avec le nom, le mode d'accès et la preuve spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String) Définit un assembly dynamique avec le nom, le mode d'accès et le répertoire de stockage spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>, SecurityContextSource) Définit un assembly dynamique avec le nom, le mode d'accès et les attributs personnalisés spécifiés, à l'aide de la source indiquée pour son contexte de sécurité.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence) Obsolète. Définit un assembly dynamique avec le nom, le mode d'accès, le répertoire de stockage et la preuve spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet) Obsolète. Définit un assembly dynamique avec le nom, le mode d'accès et les demandes d'autorisations spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable<CustomAttributeBuilder>) Définit un assembly dynamique avec le nom, le mode d'accès, le répertoire de stockage et l'option de synchronisation spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet) Obsolète. Définit un assembly dynamique avec le nom, le mode d'accès, la preuve et les demandes d'autorisations spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet) Obsolète. Définit un assembly dynamique avec le nom, le mode d'accès, le répertoire de stockage et les demandes d'autorisations spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet) Obsolète. Définit un assembly dynamique avec le nom, le mode d'accès, le répertoire de stockage, la preuve et les demandes d'autorisations spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean) Obsolète. Définit un assembly dynamique avec le nom, le mode d'accès, le répertoire de stockage, la preuve, les demandes d'autorisations et l'option de synchronisation spécifiés.
Méthode publique DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable<CustomAttributeBuilder>) Obsolète. Définit un assembly dynamique avec le nom, le mode d'accès, le répertoire de stockage, la preuve, les demandes d'autorisations, l'option de synchronisation et les attributs personnalisés spécifiés.
Méthode publique DoCallBack Exécute le code dans un autre domaine d'application identifié par le délégué spécifié.
Méthode publique Pris en charge par XNA Framework Equals(Object) Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.)
Méthode publique Pris en charge par XNA Framework ExecuteAssembly(String) Exécute l'assembly contenu dans le fichier spécifié.
Méthode publique ExecuteAssembly(String, Evidence) Obsolète. Exécute l'assembly contenu dans le fichier spécifié à l'aide de la preuve spécifiée.
Méthode publique ExecuteAssembly(String, String[]) Exécute l'assembly contenu dans le fichier spécifié à l'aide des arguments spécifiés.
Méthode publique Pris en charge par XNA Framework ExecuteAssembly(String, Evidence, String[]) Obsolète. Exécute l'assembly contenu dans le fichier spécifié à l'aide de la preuve et des arguments spécifiés.
Méthode publique ExecuteAssembly(String, String[], Byte[], AssemblyHashAlgorithm) Exécute l'assembly contenu dans le fichier spécifié à l'aide des arguments, de la valeur et de l'algorithme de hachage spécifiés.
Méthode publique ExecuteAssembly(String, Evidence, String[], Byte[], AssemblyHashAlgorithm) Obsolète. Exécute l'assembly contenu dans le fichier spécifié à l'aide de la preuve, des arguments, de la valeur et de l'algorithme de hachage spécifiés.
Méthode publique ExecuteAssemblyByName(String) Charge un assembly en fonction de son nom complet.
Méthode publique ExecuteAssemblyByName(AssemblyName, String[]) Exécute l'assembly à partir d'un AssemblyName, à l'aide des arguments spécifiés.
Méthode publique ExecuteAssemblyByName(String, Evidence) Obsolète. Exécute un assembly en fonction de son nom complet, à l'aide de la preuve spécifiée.
Méthode publique ExecuteAssemblyByName(String, String[]) Exécute l'assembly en fonction de son nom complet, à l'aide des arguments spécifiés.
Méthode publique ExecuteAssemblyByName(AssemblyName, Evidence, String[]) Obsolète. Exécute l'assembly, AssemblyName étant donné, à l'aide de la preuve et des arguments spécifiés.
Méthode publique ExecuteAssemblyByName(String, Evidence, String[]) Obsolète. Exécute l'assembly en fonction de son nom complet, à l'aide de la preuve et des arguments spécifiés.
Méthode protégée Pris en charge par XNA Framework Finalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publique GetAssemblies Obtient les assemblys qui ont été chargés dans le contexte d'exécution de ce domaine d'application.
Méthode publique Membre statique GetCurrentThreadId Obsolète. Obtient l'identificateur du thread en cours.
Méthode publique GetData Obtient la valeur stockée dans le domaine d'application actuel pour le nom spécifié.
Méthode publique Pris en charge par XNA Framework GetHashCode Sert de fonction de hachage pour un type particulier. (Hérité de Object.)
Méthode publique GetLifetimeService Récupère l'objet de service de durée de vie en cours qui contrôle la stratégie de durée de vie de cette instance. (Hérité de MarshalByRefObject.)
Méthode publique Pris en charge par XNA Framework GetType Obtient le type de l'instance actuelle.

Dans XNA Framework 3.0, ce membre est hérité de Object.GetType().
Méthode publique InitializeLifetimeService Donne à AppDomain une durée de vie infinie en empêchant toute création de bail. (Substitue MarshalByRefObject.InitializeLifetimeService().)
Méthode publique IsCompatibilitySwitchSet Obtient une valeur booléenne Nullable qui indique si les commutateurs de compatibilité sont définis, et si tel est la cas, si le commutateur de compatibilité spécifié est défini.
Méthode publique IsDefaultAppDomain Retourne une valeur qui indique si le domaine d'application est le domaine d'application par défaut du processus.
Méthode publique IsFinalizingForUnload Indique si le déchargement de ce domaine d'application est en cours et si les objets qu'il contient sont en cours de finalisation par le Common Language Runtime.
Méthode publique Load(AssemblyName) Charge Assembly en fonction de son AssemblyName.
Méthode publique Load(Byte[]) Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis.
Méthode publique Load(String) Charge Assembly en fonction de son nom complet.
Méthode publique Load(AssemblyName, Evidence) Obsolète. Charge Assembly en fonction de son AssemblyName.
Méthode publique Load(Byte[], Byte[]) Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis. Les octets bruts représentant les symboles de Assembly sont également chargés.
Méthode publique Load(String, Evidence) Obsolète. Charge Assembly en fonction de son nom complet.
Méthode publique Load(Byte[], Byte[], Evidence) Obsolète. Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis. Les octets bruts représentant les symboles de Assembly sont également chargés.
Méthode protégée Pris en charge par XNA Framework MemberwiseClone() Crée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode protégée MemberwiseClone(Boolean) Crée une copie superficielle de l'objet MarshalByRefObject actuel. (Hérité de MarshalByRefObject.)
Méthode publique ReflectionOnlyGetAssemblies Retourne les assemblys qui ont été chargés dans le contexte de réflexion uniquement du domaine d'application.
Méthode publique SetAppDomainPolicy Obsolète. Définit le niveau de stratégie de sécurité pour ce domaine d'application.
Méthode publique SetCachePath Obsolète. Définit le chemin d'accès du répertoire spécifié comme emplacement pour les clichés instantanés des assemblys.
Méthode publique SetData(String, Object) Assigne la valeur spécifiée à la propriété du domaine d'application spécifié.
Méthode publique SetData(String, Object, IPermission) Assigne la valeur spécifiée à la propriété du domaine d'application spécifiée, avec l'autorisation spécifiée de demander l'appelant lorsque la propriété est récupérée.
Méthode publique SetDynamicBase Obsolète. Définit le chemin de répertoire spécifié comme répertoire de base des sous-répertoires dans lesquels sont stockées les fichiers générés de manière dynamique et à partir desquels ils sont accessibles.
Méthode publique SetPrincipalPolicy Spécifie la façon dont les objets Principal et Identity doivent être attachés à un thread si celui-ci tente d'établir une liaison vers une entité de sécurité lors de l'exécution dans ce domaine d'application.
Méthode publique SetShadowCopyFiles Obsolète. Active les clichés instantanés.
Méthode publique SetShadowCopyPath Obsolète. Définit le chemin d'accès du répertoire spécifié comme emplacement pour les clichés instantanés des assemblys.
Méthode publique SetThreadPrincipal Définit l'objet Principal par défaut à attacher aux threads si ceux-ci tentent d'établir une liaison vers une entité de sécurité lors de l'exécution dans ce domaine d'application.
Méthode publique Pris en charge par XNA Framework ToString Obtient une représentation sous forme de chaîne qui inclut le nom convivial du domaine d'application et les stratégies de contexte. (Substitue Object.ToString().)
Méthode publique Membre statique Pris en charge par XNA Framework Unload Décharge le domaine d'application spécifié.
Début
Événements

  Nom Description
Événement public AssemblyLoad Se produit lorsqu'un assembly est chargé.
Événement public AssemblyResolve Se produit lorsque la résolution d'un assembly échoue.
Événement public DomainUnload Se produit lorsque AppDomain est sur le point d'être déchargé.
Événement public FirstChanceException Se produit lorsqu'une exception est levée dans le code managé, avant que l'exécution ne recherche un gestionnaire d'exceptions dans la pile des appels du domaine d'application.
Événement public ProcessExit Se produit lorsque le processus parent du domaine d'application par défaut s'arrête.
Événement public ReflectionOnlyAssemblyResolve Se produit lorsque la résolution d'un assembly échoue dans le contexte de réflexion uniquement.
Événement public ResourceResolve Se produit lorsque la résolution d'une ressource échoue parce que la ressource n'est pas une ressource liée ou incorporée valide de l'assembly.
Événement public TypeResolve Se produit lorsque la résolution d'un type échoue.
Événement public Pris en charge par XNA Framework UnhandledException Se produit lorsqu'une exception n'est pas interceptée.
Début
Implémentations d'interface explicite

  Nom Description
Implémentation d'interface explicite Méthode privée _AppDomain.GetIDsOfNames Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.
Implémentation d'interface explicite Méthode privée _AppDomain.GetTypeInfo Récupère les informations de type pour un objet, qui peuvent être utilisées ensuite pour obtenir les informations de type d'une interface.
Implémentation d'interface explicite Méthode privée _AppDomain.GetTypeInfoCount Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).
Implémentation d'interface explicite Méthode privée _AppDomain.Invoke Fournit l'accès aux propriétés et aux méthodes exposées par un objet.
Début
Notes

Les domaines d'application, représentés par des objets AppDomain, permettent de fournir les limites d'isolation, de déchargement et de sécurité pour l'exécution de code managé.

  • Utilisez les domaines d'application pour isoler les tâches qui peuvent interrompre un processus. Si l'état du AppDomain qui exécute une tâche devient instable, le AppDomain peut être déchargé sans affecter le processus. C'est important lorsqu'un processus doit s'exécuter pendant de longues périodes sans redémarrer. Vous pouvez également utiliser les domaines d'application pour isoler les tâches qui ne doivent pas partager de données.

  • Si un assembly est chargé dans le domaine d'application par défaut, il ne peut pas être déchargé de la mémoire tant que le processus s'exécute. Toutefois, si vous ouvrez un deuxième domaine d'application pour charger et exécuter l'assembly, l'assembly est déchargé lorsque ce domaine d'application est déchargé. Utilisez cette technique pour réduire le jeu de travail des longs processus qui utilisent parfois des DLL volumineuses.

Plusieurs domaines d'application peuvent s'exécuter dans un processus unique. Cependant, il n'existe pas de corrélation un à un entre les domaines d'application et les threads. Plusieurs threads peuvent appartenir à un même domaine d'application. Par ailleurs, même si un thread donné n'est pas confiné dans un domaine d'application unique, à un moment donné, il s'exécute dans un domaine d'application unique.

Les domaines d'application sont créés à l'aide de la méthode CreateDomain. Les instances AppDomain sont utilisées pour charger et exécuter des assemblys (Assembly). Si AppDomain n'est plus utilisé, il peut être déchargé.

La classe AppDomain implémente un ensemble d'événements permettant aux applications de répondre lorsqu'un assembly est chargé, un domaine d'application est déchargé ou une exception non gérée est levée.

Pour plus d'informations sur l'utilisation des domaines d'application, consultez Domaines d'application.

Cette classe implémente les interfaces MarshalByRefObject, _AppDomain et IEvidenceFactory.

Ne créez jamais de wrapper accessible à distance pour un objet AppDomain. Vous risqueriez alors de publier une référence distante à AppDomain, en exposant des méthodes telles que CreateInstance pour l'accès à distance et en détruisant ainsi la sécurité d'accès du code pour AppDomain. Des clients malveillants qui se connectent à l'objet AppDomain distant pourraient alors accéder à toutes les ressources auxquelles l'objet AppDomain a lui-même accès. Vous ne devez pas créer de wrappers accessibles à distance pour un type qui étend MarshalByRefObject et qui implémente des méthodes dont des clients malveillants sont susceptibles de se servir pour outrepasser le système de sécurité.

Remarque Attention Attention

La valeur par défaut pour la propriété AppDomainSetup.DisallowCodeDownload est false. Ce paramètre n'est pas sûr pour des services. Pour empêcher les services de télécharger du code d'un niveau de confiance partiel, affectez à cette propriété la valeur true.

Exemples

Cet exemple montre comment créer un nouveau AppDomain, instancier un type dans ce nouveau AppDomain, et communique avec l'objet de ce type. De plus, cet exemple montre comment décharger le AppDomain ce qui provoque la récupération de l'objet par le garbage collector.

Visual Basic

Imports System
Imports System.Reflection
Imports System.Threading

Module Module1
    Sub Main()

        ' Get and display the friendly name of the default AppDomain.
        Dim callingDomainName As String = Thread.GetDomain().FriendlyName
        Console.WriteLine(callingDomainName)

        ' Get and display the full name of the EXE assembly.
        Dim exeAssembly As String = [Assembly].GetEntryAssembly().FullName
        Console.WriteLine(exeAssembly)

        ' Construct and initialize settings for a second AppDomain.
        Dim ads As New AppDomainSetup()
        ads.ApplicationBase = _
            System.Environment.CurrentDirectory
        ads.DisallowBindingRedirects = False
        ads.DisallowCodeDownload = True
        ads.ConfigurationFile = _
            AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

        ' Create the second AppDomain.
        Dim ad2 As AppDomain = AppDomain.CreateDomain("AD #2", Nothing, ads)

        ' Create an instance of MarshalbyRefType in the second AppDomain. 
        ' A proxy to the object is returned.
        Dim mbrt As MarshalByRefType = CType( _
            ad2.CreateInstanceAndUnwrap(exeAssembly, _
                 GetType(MarshalByRefType).FullName), MarshalByRefType)

        ' Call a method on the object via the proxy, passing the default 
        ' AppDomain's friendly name in as a parameter.
        mbrt.SomeMethod(callingDomainName)

        ' Unload the second AppDomain. This deletes its object and 
        ' invalidates the proxy object.
        AppDomain.Unload(ad2)
        Try
            ' Call the method again. Note that this time it fails because 
            ' the second AppDomain was unloaded.
            mbrt.SomeMethod(callingDomainName)
            Console.WriteLine("Sucessful call.")
        Catch e As AppDomainUnloadedException
            Console.WriteLine("Failed call; this is expected.")
        End Try

    End Sub
End Module

' Because this class is derived from MarshalByRefObject, a proxy 
' to a MarshalByRefType object can be returned across an AppDomain 
' boundary.
Public Class MarshalByRefType
    Inherits MarshalByRefObject

    '  Call this method via a proxy.
    Public Sub SomeMethod(ByVal callingDomainName As String)

        ' Get this AppDomain's settings and display some of them.
        Dim ads As AppDomainSetup = AppDomain.CurrentDomain.SetupInformation
        Console.WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}", _
            ads.ApplicationName, ads.ApplicationBase, ads.ConfigurationFile)

        ' Display the name of the calling AppDomain and the name 
        ' of the second domain.
        ' NOTE: The application's thread has transitioned between 
        ' AppDomains.
        Console.WriteLine("Calling from '{0}' to '{1}'.", _
            callingDomainName, Thread.GetDomain().FriendlyName)
    End Sub
End Class

'This code produces output similar to the following:
' 
' AppDomainX.exe
' AppDomainX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
' AppName=, AppBase=C:\AppDomain\bin, ConfigFile=C:\AppDomain\bin\AppDomainX.exe.config
' Calling from 'AppDomainX.exe' to 'AD #2'.
' Failed call; this is expected.


C#

using System;
using System.Reflection;
using System.Threading;

class Module1
{
    public static void Main()
    {
        // Get and display the friendly name of the default AppDomain.
        string callingDomainName = Thread.GetDomain().FriendlyName;
        Console.WriteLine(callingDomainName);

        // Get and display the full name of the EXE assembly.
        string exeAssembly = Assembly.GetEntryAssembly().FullName;
        Console.WriteLine(exeAssembly);

        // Construct and initialize settings for a second AppDomain.
        AppDomainSetup ads = new AppDomainSetup();
        ads.ApplicationBase = 
            System.Environment.CurrentDirectory;
        ads.DisallowBindingRedirects = false;
        ads.DisallowCodeDownload = true;
        ads.ConfigurationFile = 
            AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

        // Create the second AppDomain.
        AppDomain ad2 = AppDomain.CreateDomain("AD #2", null, ads);

        // Create an instance of MarshalbyRefType in the second AppDomain. 
        // A proxy to the object is returned.
        MarshalByRefType mbrt = 
            (MarshalByRefType) ad2.CreateInstanceAndUnwrap(
                exeAssembly, 
                typeof(MarshalByRefType).FullName
            );

        // Call a method on the object via the proxy, passing the 
        // default AppDomain's friendly name in as a parameter.
        mbrt.SomeMethod(callingDomainName);

        // Unload the second AppDomain. This deletes its object and 
        // invalidates the proxy object.
        AppDomain.Unload(ad2);
        try
        {
            // Call the method again. Note that this time it fails 
            // because the second AppDomain was unloaded.
            mbrt.SomeMethod(callingDomainName);
            Console.WriteLine("Sucessful call.");
        }
        catch(AppDomainUnloadedException)
        {
            Console.WriteLine("Failed call; this is expected.");
        }
    }
}

// Because this class is derived from MarshalByRefObject, a proxy 
// to a MarshalByRefType object can be returned across an AppDomain 
// boundary.
public class MarshalByRefType : MarshalByRefObject
{
    //  Call this method via a proxy.
    public void SomeMethod(string callingDomainName)
    {
        // Get this AppDomain's settings and display some of them.
        AppDomainSetup ads = AppDomain.CurrentDomain.SetupInformation;
        Console.WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}", 
            ads.ApplicationName, 
            ads.ApplicationBase, 
            ads.ConfigurationFile
        );

        // Display the name of the calling AppDomain and the name 
        // of the second domain.
        // NOTE: The application's thread has transitioned between 
        // AppDomains.
        Console.WriteLine("Calling from '{0}' to '{1}'.", 
            callingDomainName, 
            Thread.GetDomain().FriendlyName
        );
    }
}

/* This code produces output similar to the following: 

AppDomainX.exe
AppDomainX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
AppName=, AppBase=C:\AppDomain\bin, ConfigFile=C:\AppDomain\bin\AppDomainX.exe.config
Calling from 'AppDomainX.exe' to 'AD #2'.
Failed call; this is expected.
 */


VisualC++

using namespace System;
using namespace System::Reflection;
using namespace System::Threading;
using namespace System::Security::Policy;

// Because this class is derived from MarshalByRefObject, a proxy 
// to a MarshalByRefType object can be returned across an AppDomain 
// boundary.
ref class MarshalByRefType : MarshalByRefObject
{
public:
    //  Call this method via a proxy.
    void SomeMethod(String^ callingDomainName)
    {
        // Get this AppDomain's settings and display some of them.
        AppDomainSetup^ ads = AppDomain::CurrentDomain->SetupInformation;
        Console::WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}", 
            ads->ApplicationName, 
            ads->ApplicationBase, 
            ads->ConfigurationFile
        );

        // Display the name of the calling AppDomain and the name 
        // of the second domain.
        // NOTE: The application's thread has transitioned between 
        // AppDomains.
        Console::WriteLine("Calling from '{0}' to '{1}'.", 
            callingDomainName, 
            Thread::GetDomain()->FriendlyName
        );
    };
};

void main()
{
    // Get and display the friendly name of the default AppDomain.
    String^ callingDomainName = Thread::GetDomain()->FriendlyName;
    Console::WriteLine(callingDomainName);

    // Get and display the full name of the EXE assembly.
    String^ exeAssembly = Assembly::GetEntryAssembly()->FullName;
    Console::WriteLine(exeAssembly);

    // Construct and initialize settings for a second AppDomain.
    AppDomainSetup^ ads = gcnew AppDomainSetup();
    ads->ApplicationBase = 
        System::Environment::CurrentDirectory;
    ads->DisallowBindingRedirects = false;
    ads->DisallowCodeDownload = true;
    ads->ConfigurationFile = 
        AppDomain::CurrentDomain->SetupInformation->ConfigurationFile;

    // Create the second AppDomain.
    AppDomain^ ad2 = AppDomain::CreateDomain("AD #2", 
        AppDomain::CurrentDomain->Evidence, ads);

    // Create an instance of MarshalbyRefType in the second AppDomain. 
    // A proxy to the object is returned.
    MarshalByRefType^ mbrt = 
        (MarshalByRefType^) ad2->CreateInstanceAndUnwrap(
            exeAssembly, 
            MarshalByRefType::typeid->FullName
        );

    // Call a method on the object via the proxy, passing the 
    // default AppDomain's friendly name in as a parameter.
    mbrt->SomeMethod(callingDomainName);

    // Unload the second AppDomain. This deletes its object and 
    // invalidates the proxy object.
    AppDomain::Unload(ad2);
    try
    {
        // Call the method again. Note that this time it fails 
        // because the second AppDomain was unloaded.
        mbrt->SomeMethod(callingDomainName);
        Console::WriteLine("Sucessful call.");
    }
    catch(AppDomainUnloadedException^)
    {
        Console::WriteLine("Failed call; this is expected.");
    }
}

/* This code produces output similar to the following: 

AppDomainX.exe
AppDomainX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
AppName=, AppBase=C:\AppDomain\bin, ConfigFile=C:\AppDomain\bin\AppDomainX.exe.config
Calling from 'AppDomainX.exe' to 'AD #2'.
Failed call; this is expected.
 */


Informations de version

.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1
Plateformes

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Sécurité des threads

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Voir aussi

Référence

Autres ressources