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.
System.MarshalByRefObject
System.AppDomain
Espace de noms : System
Assembly : mscorlib (dans mscorlib.dll)
<ClassInterfaceAttribute(ClassInterfaceType.None)> _ <ComVisibleAttribute(True)> _ Public NotInheritable Class AppDomain _ Inherits MarshalByRefObject _ Implements _AppDomain, IEvidenceFactory
[ClassInterfaceAttribute(ClassInterfaceType.None)] [ComVisibleAttribute(true)] public sealed class AppDomain : MarshalByRefObject, _AppDomain, IEvidenceFactory
[ClassInterfaceAttribute(ClassInterfaceType::None)] [ComVisibleAttribute(true)] public ref class AppDomain sealed : public MarshalByRefObject, _AppDomain, IEvidenceFactory
[<Sealed>] [<ClassInterfaceAttribute(ClassInterfaceType.None)>] [<ComVisibleAttribute(true)>] type AppDomain = class inherit MarshalByRefObject interface _AppDomain interface IEvidenceFactory end
Le type AppDomain expose les membres suivants.
| Nom | Description | |
|---|---|---|
|
ActivationContext | Obtient le contexte d'activation du domaine d'application actuel. |
|
ApplicationIdentity | Obtient l'identité de l'application dans le domaine d'application. |
|
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. |
|
BaseDirectory | Obtient le répertoire de base qu'utilise le programme de résolution d'assembly pour détecter les assemblys. |
|
CurrentDomain | Obtient le domaine d'application actuel pour le Thread en cours. |
|
DomainManager | Obtient le gestionnaire de domaine qui a été fourni par l'hôte lorsque le domaine d'application a été initialisé. |
|
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. |
|
Evidence | Obtient le Evidence associé à ce domaine d'application. |
|
FriendlyName | Obtient le nom convivial de ce domaine d'application. |
|
Id | Obtient un entier qui identifie de façon unique le domaine d'application au sein du processus. |
|
IsFullyTrusted | Obtient une valeur qui indique si les assemblys chargés dans le domaine d'application actuel s'exécutent avec la confiance totale. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
PermissionSet | Obtient le jeu d'autorisations d'un domaine d'application en mode bac à sable (sandbox). |
|
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. |
|
SetupInformation | Obtient les informations de configuration du domaine d'application pour cette instance. |
|
ShadowCopyFiles | Obtient une indication précisant si le domaine d'application est configuré pour effectuer un cliché instantané des fichiers. |
| Nom | Description | |
|---|---|---|
|
AppendPrivatePath | Obsolète. Ajoute le nom de répertoire spécifié à la liste des chemins d'accès privée. |
|
ApplyPolicy | Retourne le nom complet d'assembly après que la stratégie a été appliquée. |
|
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. |
|
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. |
|
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. |
|
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. |
|
CreateDomain(String) | Crée un nouveau domaine d'application portant le nom spécifié. |
|
CreateDomain(String, Evidence) | Crée un nouveau domaine d'application portant le nom spécifié à l'aide de la preuve fournie. |
|
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. |
|
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. |
|
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. |
|
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. |
|
CreateInstance(String, String) | Crée une nouvelle instance du type spécifié défini dans l'assembly déterminé. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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éé. |
|
CreateInstanceFrom(String, String) | Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé. |
|
CreateInstanceFrom(String, String, Object[]) | Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé. |
|
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é. |
|
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é. |
|
CreateInstanceFromAndUnwrap(String, String) | Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé. |
|
CreateInstanceFromAndUnwrap(String, String, Object[]) | Crée une nouvelle instance du type spécifié défini dans le fichier d'assembly déterminé. |
|
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. |
|
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é. |
|
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.) |
|
DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess) | Définit un assembly dynamique avec le nom et le mode d'accès spécifiés. |
|
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. |
|
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. |
|
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. |
|
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é. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
DoCallBack | Exécute le code dans un autre domaine d'application identifié par le délégué spécifié. |
|
Equals(Object) | Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.) |
|
ExecuteAssembly(String) | Exécute l'assembly contenu dans le fichier spécifié. |
|
ExecuteAssembly(String, Evidence) | Obsolète. Exécute l'assembly contenu dans le fichier spécifié à l'aide de la preuve spécifiée. |
|
ExecuteAssembly(String, String[]) | Exécute l'assembly contenu dans le fichier spécifié à l'aide des arguments spécifiés. |
|
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. |
|
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. |
|
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. |
|
ExecuteAssemblyByName(String) | Charge un assembly en fonction de son nom complet. |
|
ExecuteAssemblyByName(AssemblyName, String[]) | Exécute l'assembly à partir d'un AssemblyName, à l'aide des arguments spécifiés. |
|
ExecuteAssemblyByName(String, Evidence) | Obsolète. Exécute un assembly en fonction de son nom complet, à l'aide de la preuve spécifiée. |
|
ExecuteAssemblyByName(String, String[]) | Exécute l'assembly en fonction de son nom complet, à l'aide des arguments spécifiés. |
|
ExecuteAssemblyByName(AssemblyName, Evidence, String[]) | Obsolète. Exécute l'assembly, AssemblyName étant donné, à l'aide de la preuve et des arguments spécifiés. |
|
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. |
|
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.) |
|
GetAssemblies | Obtient les assemblys qui ont été chargés dans le contexte d'exécution de ce domaine d'application. |
|
GetCurrentThreadId | Obsolète. Obtient l'identificateur du thread en cours. |
|
GetData | Obtient la valeur stockée dans le domaine d'application actuel pour le nom spécifié. |
|
GetHashCode | Sert de fonction de hachage pour un type particulier. (Hérité de Object.) |
|
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.) |
|
GetType |
Obtient le type de l'instance actuelle.
Dans XNA Framework 3.0, ce membre est hérité de Object.GetType(). |
|
InitializeLifetimeService | Donne à AppDomain une durée de vie infinie en empêchant toute création de bail. (Substitue MarshalByRefObject.InitializeLifetimeService().) |
|
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. |
|
IsDefaultAppDomain | Retourne une valeur qui indique si le domaine d'application est le domaine d'application par défaut du processus. |
|
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. |
|
Load(AssemblyName) | Charge Assembly en fonction de son AssemblyName. |
|
Load(Byte[]) | Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis. |
|
Load(String) | Charge Assembly en fonction de son nom complet. |
|
Load(AssemblyName, Evidence) | Obsolète. Charge Assembly en fonction de son AssemblyName. |
|
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. |
|
Load(String, Evidence) | Obsolète. Charge Assembly en fonction de son nom complet. |
|
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. |
|
MemberwiseClone() | Crée une copie superficielle de l'objet Object actif. (Hérité de Object.) |
|
MemberwiseClone(Boolean) | Crée une copie superficielle de l'objet MarshalByRefObject actuel. (Hérité de MarshalByRefObject.) |
|
ReflectionOnlyGetAssemblies | Retourne les assemblys qui ont été chargés dans le contexte de réflexion uniquement du domaine d'application. |
|
SetAppDomainPolicy | Obsolète. Définit le niveau de stratégie de sécurité pour ce domaine d'application. |
|
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. |
|
SetData(String, Object) | Assigne la valeur spécifiée à la propriété du domaine d'application spécifié. |
|
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. |
|
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. |
|
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. |
|
SetShadowCopyFiles | Obsolète. Active les clichés instantanés. |
|
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. |
|
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. |
|
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().) |
|
Unload | Décharge le domaine d'application spécifié. |
| Nom | Description | |
|---|---|---|
|
AssemblyLoad | Se produit lorsqu'un assembly est chargé. |
|
AssemblyResolve | Se produit lorsque la résolution d'un assembly échoue. |
|
DomainUnload | Se produit lorsque AppDomain est sur le point d'être déchargé. |
|
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. |
|
ProcessExit | Se produit lorsque le processus parent du domaine d'application par défaut s'arrête. |
|
ReflectionOnlyAssemblyResolve | Se produit lorsque la résolution d'un assembly échoue dans le contexte de réflexion uniquement. |
|
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. |
|
TypeResolve | Se produit lorsque la résolution d'un type échoue. |
|
UnhandledException | Se produit lorsqu'une exception n'est pas interceptée. |
| Nom | Description | |
|---|---|---|
|
_AppDomain.GetIDsOfNames | Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch. |
|
_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. |
|
_AppDomain.GetTypeInfoCount | Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1). |
|
_AppDomain.Invoke | Fournit l'accès aux propriétés et aux méthodes exposées par un objet. |
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é.
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. |
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.
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.
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. */
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. */
.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 SP1Windows 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.
Attention