Copias sombra de ensambladosShadow Copying Assemblies

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.Shadow copying enables assemblies that are used in an application domain to be updated without unloading the application domain. Esto es especialmente útil para las aplicaciones que tienen que estar disponibles continuamente, como los sitios de ASP.NET.This is particularly useful for applications that must be available continuously, such as ASP.NET sites.

Importante

No se admite la copia sombra en aplicaciones de la tienda Windows 8. x.Shadow copying is not supported in Windows 8.x Store apps.

Common Language Runtime bloquea el archivo de ensamblado al cargar el ensamblado, por lo que no se puede actualizar el archivo hasta que se descarga el ensamblado.The common language runtime locks an assembly file when the assembly is loaded, so the file cannot be updated until the assembly is unloaded. 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, no se puede actualizar un ensamblado en el disco hasta que todos los dominios de aplicación que lo están usando se descargan.The only way to unload an assembly from an application domain is by unloading the application domain, so under normal circumstances, an assembly cannot be updated on disk until all the application domains that are using it have been unloaded.

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.When an application domain is configured to shadow copy files, assemblies from the application path are copied to another location and loaded from that location. La instantánea está bloqueada, pero el archivo de ensamblado original está desbloqueado y se puede actualizar.The copy is locked, but the original assembly file is unlocked and can be updated.

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.The only assemblies that can be shadow copied are those stored in the application directory or its subdirectories, specified by the ApplicationBase and PrivateBinPath properties when the application domain is configured. De los ensamblados almacenados en la caché global de ensamblados no se realizan instantáneas.Assemblies stored in the global assembly cache are not shadow copied.

Este artículo contiene las siguientes secciones:This article contains the following sections:

  • En Habilitar y usar instantáneas se describe el uso básico y las opciones disponibles para crear instantáneas.Enabling and Using Shadow Copying describes the basic use and the options that are available for shadow copying.

  • En Rendimiento de inicio se describen los cambios que se realizan para crear instantáneas en .NET Framework 4 de cara a mejorar el rendimiento de inicio y cómo revertir al comportamiento de las versiones anteriores.Startup Performance describes the changes that are made to shadow copying in the .NET Framework 4 to improve startup performance, and how to revert to the behavior of earlier versions.

  • En Métodos obsoletos se describen los cambios realizados en las propiedades y los métodos que controlan las instantáneas en .NET Framework 2.0.Obsolete Methods describes the changes that were made to the properties and methods that control shadow copying in the .NET Framework 2.0.

Habilitar y usar instantáneasEnabling and Using Shadow Copying

Puede utilizar las propiedades de la clase AppDomainSetup como se indica a continuación para configurar un dominio de aplicación y crear instantáneas:You can use the properties of the AppDomainSetup class as follows to configure an application domain for shadow copying:

  • Habilite las instantáneas estableciendo la propiedad ShadowCopyFiles como el valor de cadena "true".Enable shadow copying by setting the ShadowCopyFiles property to the string value "true".

    De forma predeterminada, este ajuste hace que todos los ensamblados de la ruta de acceso de la aplicación se copien en una caché de descarga antes de cargarse.By default, this setting causes all assemblies in the application path to be copied to a download cache before they are loaded. Se trata de la misma caché mantenida por Common Language Runtime para almacenar archivos descargados de otros equipos, y Common Language Runtime elimina automáticamente los archivos cuando dejan de ser necesarios.This is the same cache maintained by the common language runtime to store files downloaded from other computers, and the common language runtime automatically deletes the files when they are no longer needed.

  • Si quiere, establezca una ubicación personalizada para los archivos de instantáneas con las propiedades CachePath y ApplicationName.Optionally set a custom location for shadow copied files by using the CachePath property and the ApplicationName property.

    La ruta de acceso base de la ubicación se forma concatenando la propiedad ApplicationName a la propiedad CachePath como un subdirectorio.The base path for the location is formed by concatenating the ApplicationName property to the CachePath property as a subdirectory. Las instantáneas de los ensamblados se colocan en los subdirectorios de esta ruta, no en la ruta de acceso base.Assemblies are shadow copied to subdirectories of this path, not to the base path itself.

    Nota

    Si no se establece la propiedad ApplicationName, la propiedad CachePath se ignora y se utiliza la caché de descarga.If the ApplicationName property is not set, the CachePath property is ignored and the download cache is used. No se inicia ninguna excepción.No exception is thrown.

    Si especifica una ubicación personalizada, será usted el responsable de limpiar los directorios y los archivos copiados cuando dejen de ser necesarios.If you specify a custom location, you are responsible for cleaning up the directories and copied files when they are no longer needed. No se eliminan automáticamente.They are not deleted automatically.

    Hay varias razones por las que puede que le convenga establecer una ubicación personalizada para los archivos de instantáneas.There are a few reasons why you might want to set a custom location for shadow copied files. Puede que le venga bien establecer una ubicación personalizada para los archivos de instantáneas si la aplicación genera un gran número de copias.You might want to set a custom location for shadow copied files if your application generates a large number of copies. La caché de descarga tiene un límite de tamaño, no de duración, por lo que es posible que Common Language Runtime trate de eliminar un archivo que todavía se esté usando.The download cache is limited by size, not by lifetime, so it is possible that the common language runtime will attempt to delete a file that is still in use. Otra razón para establecer una ubicación personalizada se da cuando los usuarios que ejecutan la aplicación no tienen acceso de escritura a la ubicación del directorio que Common Language Runtime utiliza para la caché de descarga.Another reason to set a custom location is when users running your application do not have write access to the directory location the common language runtime uses for the download cache.

  • Si quiere, puede limitar los ensamblados de los que se toman instantáneas con la propiedad ShadowCopyDirectories.Optionally limit the assemblies that are shadow copied by using the ShadowCopyDirectories property.

    Al habilitar las instantáneas en un dominio de aplicación, el valor predeterminado es copiar todos los ensamblados en la ruta de acceso de la aplicación, es decir, en los directorios especificados por las propiedades ApplicationBase y PrivateBinPath.When you enable shadow copying for an application domain, the default is to copy all assemblies in the application path — that is, in the directories specified by the ApplicationBase and PrivateBinPath properties. Puede limitar la copia a determinados directorios: para ello, cree una cadena que contenga solo los directorios de los que quiera crear instantáneas y asigne la cadena a la propiedad ShadowCopyDirectories.You can limit the copying to selected directories by creating a string that contains only those directories you want to shadow copy, and assigning the string to the ShadowCopyDirectories property. Separe los directorios con punto y coma.Separate the directories with semicolons. Solo se realizarán instantáneas de los ensamblados situados en los directorios seleccionados.The only assemblies that are shadow copied are the ones in the selected directories.

    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.If you don’t assign a string to the ShadowCopyDirectories property, or if you set this property to null, all assemblies in the directories specified by the ApplicationBase and PrivateBinPath properties are shadow copied.

    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.Directory paths must not contain semicolons, because the semicolon is the delimiter character. No hay ningún carácter de escape para el punto y coma.There is no escape character for semicolons.

Rendimiento de inicioStartup Performance

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.When an application domain that uses shadow copying starts, there is a delay while assemblies in the application directory are copied to the shadow copy directory, or verified if they are already in that location. Antes de .NET Framework 4, todos los ensamblados se copiaban en un directorio temporal.Before the .NET Framework 4, all assemblies were copied to a temporary directory. Cada ensamblado se abría para comprobar el nombre del ensamblado y el nombre seguro se validaba.Each assembly was opened to verify the assembly name, and the strong name was validated. Se comprobaba cada ensamblado para saber si se actualizó más recientemente que la copia del directorio de instantáneas.Each assembly was checked to see whether it had been updated more recently than the copy in the shadow copy directory. Si es así, se copiaba al directorio de instantáneas.If so, it was copied to the shadow copy directory. Por último, se descartaban las copias temporales.Finally, the temporary copies were discarded.

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.Beginning with the .NET Framework 4, the default startup behavior is to directly compare the file date and time of each assembly in the application directory with the file date and time of the copy in the shadow copy directory. Si el ensamblado se ha actualizado, se copiará con el mismo procedimiento que en las versiones anteriores de .NET Framework. Si no, se cargará la copia del directorio de instantáneas.If the assembly has been updated, it is copied by using the same procedure as in earlier versions of the .NET Framework; otherwise, the copy in the shadow copy directory is loaded.

La mejora del rendimiento resultante es mayor en las aplicaciones en las que los ensamblados no cambian con frecuencia y, normalmente, los cambios se producen en un pequeño subconjunto de ensamblados.The resulting performance improvement is largest for applications in which assemblies do not change frequently and changes usually occur in a small subset of assemblies. Si la mayoría de los ensamblados de una aplicación cambia con frecuencia, el nuevo comportamiento predeterminado puede provocar una regresión del rendimiento.If a majority of assemblies in an application change frequently, the new default behavior might cause a performance regression. Puede restaurar el comportamiento de inicio de las versiones anteriores de .NET Framework. Para ello, agregue el elemento <shadowCopyVerifyByTimestamp> al archivo de configuración, con enabled="false".You can restore the startup behavior of previous versions of the .NET Framework by adding the <shadowCopyVerifyByTimestamp> element to the configuration file, with enabled="false".

Métodos obsoletosObsolete Methods

La clase AppDomain tiene varios métodos, como SetShadowCopyFiles y ClearShadowCopyPath, que pueden utilizarse para controlar la creación de instantáneas en un dominio de aplicación, pero estos métodos se marcaron como obsoletos en la versión 2.0 de .NET Framework.The AppDomain class has several methods, such as SetShadowCopyFiles and ClearShadowCopyPath, that can be used to control shadow copying on an application domain, but these have been marked obsolete in the .NET Framework version 2.0. La forma recomendada de configurar un dominio de aplicación es utilizar las propiedades de la clase AppDomainSetup.The recommended way to configure an application domain for shadow copying is to use the properties of the AppDomainSetup class.

Vea tambiénSee also