Clichés instantanés d'assemblys
Mise à jour : novembre 2007
Les clichés instantanés permettent la mise à jour des assemblys utilisés dans un domaine d'application sans déchargement du domaine d'application. Cela est particulièrement utile pour les applications qui doivent être disponibles en permanence, telles que les sites ASP.NET.
Le Common Language Runtime verrouille un fichier d'assembly lorsque l'assembly est chargé, afin que le fichier ne puisse pas être mis à jour avant le déchargement de l'assembly. La seule façon de décharger un assembly d'un domaine d'application est de décharger le domaine d'application de sorte que, dans des conditions normales, un assembly ne peut pas être mis à jour sur le disque tant que tous les domaines d'application qui l'utilisent n'ont pas été déchargés.
Lorsqu'un domaine d'application est configuré pour effectuer des clichés instantanés de fichiers, les assemblys du chemin d'accès de l'application sont copiés dans un autre emplacement et chargés à partir de cet emplacement. La copie est verrouillée, mais le fichier d'assembly d'origine est déverrouillé et peut être mis à jour.
Remarque importante : |
---|
Les seuls assemblys pouvant faire l'objet de clichés instantanés sont ceux stockés dans le répertoire de l'application ou ses sous-répertoires, spécifiés par les propriétés ApplicationBase et PrivateBinPath lorsque le domaine d'application est configuré. Les assemblys stockés dans le Global Assembly Cache ne font pas l'objet de clichés instantanés. |
La liste suivante décrit comment utiliser les propriétés de la classe AppDomainSetup afin de configurer un domaine d'application pour la création de clichés instantanés.
Activez la création de clichés instantanés en définissant la propriété ShadowCopyFiles sur la valeur de chaîne "true".
Par défaut, cela entraîne la copie de tous les assemblys du chemin d'accès de l'application vers un cache de téléchargement avant leur chargement. Il s'agit du même cache que celui géré par le Common Language Runtime pour stocker des fichiers téléchargés à partir d'autres ordinateurs, et le Common Language Runtime supprime automatiquement les fichiers lorsqu'ils ne sont plus nécessaires.
Définissez éventuellement un emplacement personnalisé pour les clichés instantanés de fichiers à l'aide de la propriété CachePath et de la propriété ApplicationName. Le chemin d'accès de base de l'emplacement est formé par la concaténation de la propriété ApplicationName à la propriété CachePath en tant que sous-répertoire. Des clichés instantanés d'assemblys sont créés dans des sous-répertoires de ce chemin d'accès, et non dans le chemin d'accès de base lui-même.
Remarque : Si la propriété ApplicationName n'est pas définie, la propriété CachePath est ignorée et le cache de téléchargement est utilisé. Aucune exception n'est levée.
Si vous spécifiez un emplacement personnalisé, vous êtes chargé de nettoyer les répertoires et les fichiers copiés lorsqu'ils ne sont plus nécessaires. Ils ne sont pas supprimés automatiquement.
Deux raisons peuvent expliquer que vous souhaitiez définir un emplacement personnalisé pour les clichés instantanés de fichiers. La définition d'un emplacement personnalisé pour les clichés instantanés de fichiers peut être nécessaire si votre application génère un grand nombre de copies. Le cache de téléchargement est limité en taille, et non en durée de vie ; il est donc possible que le Common Language Runtime tente de supprimer un fichier encore utilisé. La définition d'un emplacement personnalisé peut également s'avérer nécessaire lorsque les utilisateurs qui exécutent votre application ne disposent pas d'un accès en écriture à l'emplacement du répertoire que le Common Language Runtime utilise pour le cache de téléchargement.
Limitez éventuellement les assemblys faisant l'objet de clichés instantanés en utilisant la propriété ShadowCopyDirectories.
Lorsque vous activez les clichés instantanés pour un domaine d'application, cela implique par défaut la copie de tous les assemblys dans le chemin d'accès de l'application, c'est-à-dire dans les répertoires spécifiés par les propriétés ApplicationBase et PrivateBinPath. Vous pouvez limiter la copie aux répertoires sélectionnés en créant une chaîne contenant uniquement les répertoires dont vous souhaitez créer des clichés instantanés, et en assignant la chaîne à la propriété ShadowCopyDirectories. Séparez les répertoires par des points-virgules. Les seuls assemblys faisant l'objet de clichés instantanés sont ceux des répertoires sélectionnés.
Méthodes obsolètes
La classe AppDomain dispose de plusieurs méthodes, telles que SetShadowCopyFiles et ClearShadowCopyPath, qui peuvent être utilisées pour contrôler les clichés instantanés sur un domaine d'application, mais celles-ci ont été marquées comme obsolètes dans la version 2.0 du .NET Framework. La méthode recommandée pour configurer un domaine d'application pour la création de clichés instantanés est d'utiliser les propriétés de la classe AppDomainSetup.
Voir aussi
Référence
AppDomainSetup.ShadowCopyFiles