Compartilhar via


Fazendo cópias de sombra de assemblies

Cópias de sombra permitem que assemblies que são usados em um domínio do aplicativo sejam atualizados sem descarregar o domínio de aplicativo.Isso é particularmente útil para aplicativos que devem estar disponíveis continuamente, como sites do ASP.NET.

O Common Language Runtime bloqueia um arquivo do assembly quando o assembly é carregado para que o arquivo não possa ser atualizado até que o assembly seja descarregado.A única maneira de descarregar um assembly de um domínio de aplicativo é descarregar o domínio de aplicativo; assim, sob circunstâncias normais, um assembly não pode ser atualizado no disco até que todos os domínios de aplicativos que o estão usando tenham sido descarregados.

Quando um domínio de aplicativo é configurado para fazer cópias de sombra de arquivos, assemblies do caminho do aplicativo são copiados para outro local e carregados a partir desse local.A cópia é bloqueada, mas o arquivo do assembly original é desbloqueado e pode ser atualizado.

Observação importante:

Os assemblies só podem ser feitas cópias de sombra estão esses armazenado na diretório de aplicativo e seus subdiretórios, especificados pelo ApplicationBase e PrivateBinPath propriedades quando o domínio do aplicativo é configurado. Dos assemblies armazenados na cache global de assemblies não são feitas cópias de sombra.

A lista a seguir descreve como usar as propriedades da classe AppDomainSetup para configurar um domínio do aplicativo para a cópia de sombra.

  • Ative a cópia de sombra definindo a propriedade ShadowCopyFiles para o valor de sequência de caracteres "true".

    Por padrão, isso faz com que todos os assemblies no caminho do aplicativo sejam copiados para um cache de download antes que eles sejam carregados.Esse é o mesmo cache mantido pelo Common Language Runtime para armazenar os arquivos baixados de outros computadores, e o Common Language Runtime automaticamente exclui os arquivos quando eles não são mais necessários.

  • Opcionalmente, defina um local personalizado para as cópias de sombra dos arquivos usando a propriedade CachePath e a propriedade ApplicationName.O caminho base para o local é formado concatenando a propriedade ApplicationName para a propriedade CachePath como uma subpasta.São feitas cópias de sombra de assemblies em subpastas nesse caminho, não no caminho base em si.

    Observação:

    Se a ApplicationName propriedade não for definida, o CachePath propriedade é ignorada e cache de baixar é usado. Uma exceção é gerada.

    Se você especificar um local personalizado, você fica responsável pela limpeza de diretórios e arquivos copiados quando eles não forem mais necessários.Eles não são excluídos automaticamente.

    Há um algumas razões pelas quais talvez você queira definir um local personalizado para cópias de sombra de arquivos.Talvez seja necessário definir um local personalizado para cópias de sombra de arquivos se o aplicativo gera um grande número de cópias.O cache de download é limitado pelo tamanho, não pelo tempo de vida, portanto, é possível que o Common Language Runtime tente excluir um arquivo que ainda está em uso.Outro motivo para definir um local personalizado é quando os usuários executando o seu aplicativo não têm acesso de gravação para o local do diretório que o Common Language Runtime usa para o cache de download.

  • Opcionalmente, limite os assemblies dos quais são feitas cópias de sombra usando a propriedade ShadowCopyDirectories.

    Quando você habilita cópias de sombra para um domínio de aplicativo, o padrão é copiar todos os assemblies no caminho do aplicativo — ou seja, nos diretórios especificado pelas propriedades ApplicationBase e PrivateBinPath.Você pode limitar a cópia para diretórios selecionados criando uma sequência de caracteres que contém apenas as pastas que você fazer cópia de sombra, e atribuindo a sequência de caracteres à propriedade ShadowCopyDirectories.Separe os diretórios com ponto-e-vírgula.Os únicos assemblies dos quais são feitas cópias de sombra são aqueles nas pastas selecionadas.

Métodos Obsoletos

A classe AppDomain tem vários métodos, como SetShadowCopyFiles e ClearShadowCopyPath, que pode ser usado para controlar a cópia de sombra em um domínio de aplicativo, mas eles foram marcados como obsoletos no .NET Framework versão 2.0.A maneira recomendada para configurar um domínio de aplicativo para a cópia de sombra é usar as propriedades da classe AppDomainSetup.

Consulte também

Referência

AppDomainSetup.ShadowCopyFiles

AppDomainSetup.CachePath

AppDomainSetup.ApplicationName

AppDomainSetup.ShadowCopyDirectories