Copias sombra de ensamblados

La copia sombra permite actualizar los ensamblados que se usan en un dominio de aplicación sin necesidad de descargar el dominio de aplicación. Esto es especialmente útil para aplicaciones que deben estar continuamente disponibles, por ejemplo, los sitios ASP.NET.

Common Language Runtime bloquea un archivo de ensamblado cuando se carga el ensamblado, por lo que no se puede actualizar el archivo hasta que se descargue el ensamblado. La única manera de descargar un ensamblado de un dominio de aplicación es descargando el dominio de aplicación, por lo que en circunstancias normales, no se puede actualizar un ensamblado en disco hasta que se hayan descargado todos los dominios de aplicación que lo están utilizando.

Cuando se configura un dominio de aplicación para crear copias sombra de archivos, los ensamblados de la ruta de acceso de la aplicación se copian en otra ubicación y se cargan desde esa ubicación. La copia está bloqueada pero el archivo de ensamblado original está desbloqueado y se puede actualizar.

Nota importanteImportante

Los únicos ensamblados de los que se puede crear una copia sombra son aquéllos almacenados en el directorio de la aplicación o sus subdirectorios, especificados por las propiedades ApplicationBase y PrivateBinPath cuando se configura el dominio de aplicación.No se crean copias sombra de los ensamblados almacenados en la caché global de ensamblados.

Este artículo contiene las siguientes secciones:

  • En la sección Habilitar y usar copias sombra, se describen el uso básico y las opciones que están disponibles para crear copias sombra.

  • En la sección Rendimiento de inicio, se describen los cambios que se han realizado en las copias sombra de .NET Framework versión 4 para mejorar el rendimiento de inicio; además, se explica cómo revertir al comportamiento de las versiones anteriores.

  • En la sección Métodos obsoletos, se describen los cambios que se han realizado en las propiedades y los métodos que controlan las copias sombra en .NET Framework 2.0. 

Habilitar y usar copias sombra

Puede usar las propiedades de la clase AppDomainSetup de la siguiente manera a fin de configurar un dominio de aplicación para crear copias sombra:

  • Habilite la creación de copias sombra estableciendo la propiedad ShadowCopyFiles en el valor de cadena "true".

    De forma predeterminada, este valor hace que se copien todos los ensamblados de la ruta de acceso de la aplicación en una memoria caché de descarga antes de que se carguen. Ésta es la misma caché que Common Language Runtime mantiene para almacenar archivos descargados de otros equipos y Common Language Runtime elimina automáticamente los archivos cuando ya no se necesitan.

  • De manera opcional, establezca una ubicación personalizada para las copias sombra de archivos mediante las propiedades CachePath y ApplicationName.

    La ruta de acceso base de la ubicación se forma concatenando la propiedad ApplicationName con la propiedad CachePath como un subdirectorio. Se crea una copia sombra de los ensamblados en los subdirectorios de esta ruta de acceso, no en la propia ruta de acceso base.

    NotaNota

    Si la propiedad ApplicationName no está establecida, se omite la propiedad CachePath y se utiliza la caché de descarga.No se produce ninguna excepción.

    Si especifica una ubicación personalizada, deberá limpiar los directorios y archivos copiados cuando ya no se necesiten. No se eliminan automáticamente.

    Hay pocas razones por las que puede desear establecer una ubicación personalizada para las copias sombra de archivos. Quizás desee establecer una ubicación personalizada para las copias sombra de archivos si la aplicación genera un elevado número de copias. El tamaño, y no el período de duración, limita la caché de descarga, por lo que es posible que Common Language Runtime intente eliminar un archivo que todavía esté en uso. Otra razón para establecer una ubicación personalizada es cuando los usuarios que ejecutan su aplicación no tienen acceso de escritura en la ubicación del directorio que Common Language Runtime utiliza para la caché de descarga.

  • De manera opcional, limite los ensamblados de los que se va a crear una copia sombra mediante la propiedad ShadowCopyDirectories.

    Cuando se habilita la creación de copias sombra para un dominio de aplicación, de manera predeterminada, se copian todos los ensamblados de la ruta de acceso de la aplicación, es decir, de los directorios especificados por las propiedades ApplicationBase y PrivateBinPath. Para limitar la copia a determinados directorios, cree una cadena que contenga solo los directorios de los que desee crear una copia sombra y asigne la cadena a la propiedad ShadowCopyDirectories. Separe los directorios con punto y coma. Los únicos ensamblados de los que se crea una copia sombra son aquéllos que están en los directorios seleccionados.

    Nota importanteImportante

    Las rutas de acceso de directorio no deben contener signos de puntos y coma, ya que el signo de punto y coma es el carácter delimitador.No hay ningún carácter de escape para los signos de puntos y coma.

Rendimiento de inicio

Cuando se inicia un dominio de aplicación que utiliza la creación de copias sombra, se produce un retraso mientras se copian los ensamblados del directorio de la aplicación en el directorio de copias sombra, o mientras se comprueba si ya están en esa ubicación. En las versiones anteriores a .NET Framework 4, se copiaban todos los ensamblados en un directorio temporal. Se abría cada ensamblado para comprobar su nombre y se validaba el nombre seguro. Se comprobaba cada ensamblado para determinar si había sido actualizado más recientemente que la copia en el directorio de copias sombra. En ese caso, se copiaba en el directorio de copias sombra. Por último, se descartaban las copias temporales.

A partir de .NET Framework 4, el comportamiento de inicio predeterminado consiste en comparar directamente la fecha y la hora de los archivos de todos los ensamblados ubicados en el directorio de la aplicación con la fecha y la hora de los archivos de las copias en el directorio de copias sombra. En el caso de un ensamblado actualizado, se copia siguiendo el mismo procedimiento que en las versiones anteriores de .NET Framework; de lo contrario, se cargará la copia ubicada en el directorio de copias sombra.

La mejora de rendimiento resultante es mayor para las aplicaciones donde los ensamblados no cambian con frecuencia y los cambios suelen realizarse en un pequeño subconjunto de ensamblados. Si la mayoría de los ensamblados de una aplicación cambian con frecuencia, el nuevo comportamiento predeterminado podría dar lugar a una regresión del rendimiento. Para restaurar el comportamiento de inicio de las versiones anteriores de .NET Framework, agregue el elemento <shadowCopyVerifyByTimestamp> al archivo de configuración, con enabled="false".

Métodos obsoletos

La clase AppDomain tiene varios métodos, como SetShadowCopyFiles y ClearShadowCopyPath, que se pueden utilizar para controlar las copias sombra en un dominio de aplicación; sin embargo, estos métodos están marcados como obsoletos en la versión 2.0 de .NET Framework. La manera recomendada de configurar un dominio de aplicación para crear copias sombra es utilizar las propiedades de la clase AppDomainSetup.

Vea también

Referencia

AppDomainSetup.ShadowCopyFiles

AppDomainSetup.CachePath

AppDomainSetup.ApplicationName

AppDomainSetup.ShadowCopyDirectories

Otros recursos

<shadowCopyVerifyByTimestamp> (Elemento)