Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.
Las instantáneas permiten que los ensamblados que se usan en un dominio de aplicación se actualicen sin descargar el dominio de aplicación. Esto resulta especialmente útil para las aplicaciones que deben estar disponibles continuamente, como ASP.NET sitios.
Importante
En las aplicaciones de la Tienda Windows 8.x no se admite la generación de instantáneas.
Common Language Runtime bloquea un archivo de ensamblado cuando se carga el ensamblado, por lo que el archivo no se puede actualizar hasta que se descargue el ensamblado. La única manera de descargar un ensamblado de un dominio de aplicación es descargar el dominio de aplicación, por lo que, en circunstancias normales, un ensamblado no se puede actualizar en el disco hasta que se hayan descargado todos los dominios de aplicación que lo usan.
Cuando un dominio de aplicación se configura para realizar instantáneas de los archivos, los ensamblados de la ruta de acceso de la aplicación se copian a 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.
Importante
Los únicos ensamblados de los que se pueden realizar instantáneas son los que se almacenan en el directorio de la aplicación o sus subdirectorios, y se especifican con las propiedades ApplicationBase y PrivateBinPath cuando se configura el dominio de aplicación. De los ensamblados almacenados en la caché global de ensamblados no se realizan instantáneas.
Este artículo contiene las siguientes secciones:
Habilitar y usar la copia de sombras describe el uso básico y las opciones disponibles para la copia de sombras.
Rendimiento de arranque describe los cambios realizados en la copia en sombra en el .NET Framework 4 para mejorar el rendimiento del inicio y cómo revertir al comportamiento de las versiones anteriores.
Métodos obsoletos describe los cambios realizados en las propiedades y los métodos que controlan la copia de sombra en .NET Framework 2.0.
Habilitar y usar instantáneas
Puede usar las propiedades de la clase AppDomainSetup de la siguiente manera para configurar un dominio de aplicación para el copiado en la sombra.
Habilite las instantáneas estableciendo la propiedad ShadowCopyFiles como el valor de cadena
"true".De forma predeterminada, esta configuración hace que todos los ensamblados de la ruta de acceso de la aplicación se copien en una caché de descarga antes de cargarlos. Esta es la misma memoria caché mantenida por Common Language Runtime para almacenar archivos descargados de otros equipos y Common Language Runtime elimina automáticamente los archivos cuando ya no son necesarios.
Si quiere, establezca una ubicación personalizada para los archivos de instantáneas con las propiedades CachePath y ApplicationName.
La ruta de acceso base de la ubicación se forma concatenando la propiedad ApplicationName a la propiedad CachePath como un subdirectorio. Las instantáneas de los ensamblados se colocan en los subdirectorios de esta ruta, no en la ruta de acceso base.
Nota:
Si no se establece la ApplicationName propiedad, se omite la CachePath propiedad y se usa la memoria caché de descarga. No se inicia ninguna excepción.
Si especifica una ubicación personalizada, es responsable de limpiar los directorios y copiar archivos cuando ya no sean necesarios. No se eliminan automáticamente.
Hay varias razones por las que puede que le convenga establecer una ubicación personalizada para los archivos de instantáneas. Podría querer establecer una ubicación personalizada para los archivos copiados en sombra si su aplicación genera un gran número de copias. La caché de descarga está limitada por tamaño, no por duración, por lo que es posible que Common Language Runtime intente eliminar un archivo que todavía está en uso. Otro motivo para establecer una ubicación personalizada es cuando los usuarios que ejecutan la aplicación no tienen acceso de escritura a la ubicación del directorio que Common Language Runtime usa para la caché de descarga.
Si quiere, puede limitar los ensamblados de los que se toman instantáneas con la propiedad ShadowCopyDirectories.
Al habilitar el copiado en sombra para un dominio de aplicación, el valor predeterminado es copiar todos los ensamblados de la ruta de acceso de la aplicación, es decir, en los directorios especificados por las propiedades ApplicationBase y PrivateBinPath. Puede limitar la copia a directorios seleccionados creando una cadena que contenga solo los directorios de los que desea hacer una copia de sombra y asignando la cadena a la propiedad ShadowCopyDirectories. Separe los directorios con punto y coma. Solo se realizarán instantáneas de los ensamblados situados en los directorios seleccionados.
Nota:
Si no asigna ninguna cadena a la propiedad ShadowCopyDirectories, o si establece esta propiedad como
null, se realizarán instantáneas de todos los ensamblados de los directorios especificados por las propiedades ApplicationBase y PrivateBinPath.Importante
Las rutas de acceso de directorio no deben contener ningún carácter de punto y coma, porque el punto y coma es el carácter delimitador. No hay ningún carácter de escape para el punto y coma.
Rendimiento de inicio
Cuando se inicia un dominio de aplicación que utiliza instantáneas, hay un retraso mientras las instantáneas del directorio de aplicación se copian al directorio de instantáneas, o se comprueba si ya están en esa ubicación. Antes de .NET Framework 4, todos los ensamblados se copiaron en un directorio temporal. Cada ensamblado se abría para comprobar el nombre del ensamblado y el nombre seguro se validaba. Se comprobaba cada ensamblado para saber si se actualizó más recientemente que la copia del directorio de instantáneas. Si es así, se copiaba al directorio de instantáneas. Por último, se descartaron las copias temporales.
A partir de .NET Framework 4, el comportamiento de inicio predeterminado consiste en comparar directamente la fecha y la hora de cada archivo de ensamblado del directorio de aplicación con la fecha y la hora de la copia situada en el directorio de instantáneas. Si el ensamblado se ha actualizado, se copia mediante el mismo procedimiento que en versiones anteriores de .NET Framework; de lo contrario, se carga la copia en el directorio de copia en sombra.
La mejora del rendimiento resultante es mayor para las aplicaciones en las que los ensamblados no cambian con frecuencia y los cambios suelen producirse 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 provocar una regresión del rendimiento. Puede restaurar el comportamiento de inicio de las versiones anteriores de .NET Framework agregando el <shadowCopyVerifyByTimestamp> elemento al archivo de configuración, con enabled="false".
Métodos obsoletos
La AppDomain clase tiene varios métodos, como SetShadowCopyFiles y ClearShadowCopyPath, que se pueden usar para controlar la copia de sombra en un dominio de aplicación, pero estos se han marcado como obsoletos en .NET Framework versión 2.0. La forma recomendada de configurar un dominio de aplicación para la copia en sombra es usar las propiedades de la clase AppDomainSetup.