Création et configuration de domaines d'application
Une fois que l'hôte a déterminé l'emplacement des limites de domaine en fonction des critères décrits dans la section précédente, l'hôte utilise la méthode CreateDomain du type System.AppDomain pour créer les domaines dans lesquels exécuter le code utilisateur. Chaque domaine d'application contient une collection de paires nom/valeur dans laquelle un hôte peut stocker des informations sur un domaine. Les paires nom/valeur sont passées sous la forme d'un paramètre à CreateDomain.
Le .NET Framework définit un certain nombre de propriétés qui sont comprises en mode natif par le runtime. Les noms de ces propriétés sont définis par les chaînes statiques dans la classe System.AppDomain. Un hôte peut définir les propriétés comprises en mode natif de manière à personnaliser le domaine d'application. Par exemple, ces propriétés peuvent contrôler le mode d'isolement du code s'exécutant dans les différents domaines. Les paires nom/valeur peuvent être étendues, de sorte que les hôtes puissent définir des propriétés personnalisées dans lesquelles ils peuvent stocker des informations spécifiques à leur scénario.
En général, l'isolation proposée par les domaines d'application prend deux formes :
Les domaines d'application empêchent le code s'exécutant dans un domaine d'application d'affecter d'autres domaines, en empêchant les types figurant dans un domaine de voir et d'appeler les types se trouvant dans d'autres domaines. Les domaines d'application s'appuient sur le fait que le code a été vérifié pour prévenir les erreurs de mémoire.
L'hôte contrôle l'emplacement dans lequel le runtime recherche le code à charger dans un domaine d'application particulier de sa part. Cela est important, car cela empêche le code d'une application d'affecter par inadvertance d'autres applications. La capacité à définir l'étendue des demandes de chargement du code de cette manière diffère considérablement de la manière dont Microsoft Win32 et COM fonctionnent actuellement. Dans Windows, la portée de résolution correspond actuellement à l'ensemble de l'ordinateur, car une application peut utiliser un code décrit dans le Registre ou situé dans un emplacement courant, tel que le répertoire système de Windows. Ce mode de partage constitue actuellement le paramètre par défaut et ce comportement contribue à créer des conflits DLL.
Outre l'établissement d'une portée concernant la manière dont le code doit être chargé, il est également important de porter des informations sur la configuration dans une application. Cela n'est toutefois actuellement pas possible pour de nombreux paramètres de configuration.
Par exemple, si vous configurez un ordinateur distant sur lequel exécuter une classe COM, le paramètre de la clé RemoteServerName figurant dans le Registre pour une classe particulière affecte toutes les applications qui utilisent cette classe. Comme le partage de code involontaire, le partage des données de configuration involontaire empêche une application de contrôler complètement son propre comportement.
Les propriétés System.AppDomainFlags.ApplicationBase et System.AppDomainFlags.ConfigurationFile contrôlent respectivement la capacité à spécifier les répertoires dans lesquels le runtime recherche les assemblys et définit l'étendue des paramètres de configuration pour un domaine d'application particulier.
ApplicationBase établit un répertoire racine pour le domaine d'application dans lequel le runtime recherche des assemblys privés. Si un hôte autorise le chargement des assemblys à partir du disque, il doit fournir ApplicationBase pour que le runtime sache où rechercher les assemblys chargés.
La propriété ConfigurationFile spécifie le nom d'un fichier XML qui contient les paramètres permettant de configurer l'application s'exécutant dans le domaine d'application. Par exemple, les paramètres figurant dans le fichier de configuration de l'application comprennent les règles de versioning des assemblys et des instructions sur la localisation des types pouvant être accédés à distance par les types s'exécutant dans le domaine d'application.
Pour obtenir les descriptions des autres propriétés disponibles pour la configuration d'un domaine d'application, consultez la documentation sur la classe AppDomain.
Remarque sur la sécurité La valeur par défaut de la propriété AppDomainSetup.DisallowCodeDownload est false. Ce paramètre n'est pas sûr pour des services. Pour éviter que des services ne téléchargent du code d'un niveau de confiance partiel, affectez la valeur true à cette propriété.