Partager via


Clichés instantanés d'assemblys

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 importanteImportant

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.

Cette article contient les sections suivantes :

  • Activation et utilisation des clichés instantanés décrit l'utilisation de base et les options disponibles pour les clichés instantanés.

  • Performances au démarrage répertorie les modifications apportées aux clichés instantanés dans le .NET Framework version 4 pour améliorer les performances au démarrage et explique comment rétablir le comportement des versions antérieures.

  • Méthodes obsolètes répertorie les modifications apportées aux propriétés et aux méthodes qui contrôlent les clichés instantanés dans le .NET Framework 2.0. 

Activation et utilisation des clichés instantanés

Vous pouvez utiliser les propriétés de la classe AppDomainSetup pour configurer un domaine d'application pour la création de clichés instantanés de la façon suivante :

  • 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, ce paramètre 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.

    RemarqueRemarque

    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.

    Certaines 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.

    Remarque importanteImportant

    Les chemins d'accès aux répertoires ne doivent pas contenir de points-virgules, car le point-virgule est le caractère délimiteur.Il n'existe pas de caractère d'échappement pour les points-virgules.

Performances au démarrage

Lorsqu'un domaine d'application utilisant des clichés instantanés démarre, il y a un délai d'attente pendant que les assemblys du répertoire de l'application sont copiés vers le répertoire des clichés instantanés ou pendant qu'il est vérifié s'ils se trouvent déjà à cet emplacement. Avant le .NET Framework 4, tous les assemblys étaient copiés vers un répertoire temporaire. Chaque assembly était ouvert pour vérifier le nom de l'assembly et le nom fort était validé. Chaque assembly était vérifié pour voir s'il avait été mis à jour avant la copie présente dans le répertoire des clichés instantanés. Si c'était le cas, il était copié vers le répertoire des clichés instantanés. Enfin, les copies temporaires étaient supprimées.

À partir du .NET Framework 4, le comportement au démarrage par défaut est de comparer directement les date et heure de chaque assembly du répertoire de l'application avec les date et heure de la copie présente dans le répertoire des clichés instantanés. Si l'assembly a été mis à jour, il est copié à l'aide de la même procédure que dans les versions antérieures du .NET Framework ; sinon, la copie du répertoire des clichés instantanés est chargée.

L'amélioration des performances qui en résulte est encore plus importante pour les applications dans lesquelles les modifications des assemblys ne sont pas fréquentes et sont effectuées habituellement dans un petit sous-ensemble d'assemblys. Si la majorité des assemblys d'une d'application sont fréquemment modifiés, le nouveau comportement par défaut peut provoquer une régression des performances. Vous pouvez restaurer le comportement au démarrage des versions antérieures du .NET Framework en ajoutant l'élément <shadowCopyVerifyByTimestamp> au fichier de configuration, avec enabled="false".

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

AppDomainSetup.CachePath

AppDomainSetup.ApplicationName

AppDomainSetup.ShadowCopyDirectories

Autres ressources

<shadowCopyVerifyByTimestamp>, élément