Partilhar via


Diretrizes para a criação de componentes para execução lado a lado

Nota

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

Siga estas diretrizes gerais para criar aplicativos gerenciados ou componentes projetados para execução lado a lado:

  • Vincular identidade de tipo a uma versão específica de um arquivo.

    O common language runtime vincula a identidade do tipo a uma versão específica do arquivo usando assemblies de nome forte. Para criar um aplicativo ou componente para execução lado a lado, você deve dar a todos os assemblies um nome forte. Isso cria uma identidade de tipo precisa e garante que qualquer resolução de tipo seja direcionada para o arquivo correto. Um assembly de nome forte contém informações de versão, cultura e editor que o tempo de execução usa para localizar o arquivo correto para atender a uma solicitação de vinculação.

  • Use o armazenamento com reconhecimento de versão.

    O tempo de execução usa o cache de assembly global para fornecer armazenamento com reconhecimento de versão. O cache de assembly global é uma estrutura de diretório com reconhecimento de versão instalada em cada computador que usa o .NET Framework. Os assemblies instalados no cache de assembly global não são substituídos quando uma nova versão desse assembly é instalada.

  • Crie um aplicativo ou componente que seja executado isoladamente.

    Um aplicativo ou componente executado isoladamente deve gerenciar recursos para evitar conflitos quando duas instâncias do aplicativo ou componente estão sendo executadas simultaneamente. O aplicativo ou componente também deve usar uma estrutura de arquivo específica da versão.

Isolamento de aplicativos e componentes

Uma chave para projetar com êxito um aplicativo ou componente para execução lado a lado é o isolamento. O aplicativo ou componente deve gerenciar todos os recursos, particularmente E/S de arquivo, de forma isolada. Siga estas diretrizes para garantir que seu aplicativo ou componente seja executado isoladamente:

  • Escreva no registo de uma forma específica da versão. Armazene valores em hives ou chaves que indiquem a versão e não compartilhe informações ou estado entre versões de um componente. Isso impede que dois aplicativos ou componentes em execução ao mesmo tempo substituam informações.

  • Faça objetos nomeados do kernel específicos da versão para que uma condição de corrida não ocorra. Por exemplo, uma condição de corrida ocorre quando dois semáforos de duas versões do mesmo aplicativo esperam um no outro.

  • Torne os nomes de arquivos e diretórios compatíveis com a versão. Isso significa que as estruturas de arquivos devem confiar em informações de versão.

  • Crie contas de usuário e grupos de maneira específica da versão. Contas de usuário e grupos criados por um aplicativo devem ser identificados por versão. Não compartilhe contas de usuário e grupos entre versões de um aplicativo.

Instalando e desinstalando versões

Ao projetar um aplicativo para execução lado a lado, siga estas diretrizes sobre instalação e desinstalação de versões:

  • Não exclua informações do Registro que possam ser necessárias para outros aplicativos em execução em uma versão diferente do .NET Framework.

  • Não substitua informações no Registro que podem ser necessárias por outros aplicativos em execução em uma versão diferente do .NET Framework.

  • Não cancele o registro de componentes COM que podem ser necessários para outros aplicativos em execução em uma versão diferente do .NET Framework.

  • Não altere InprocServer32 ou outras entradas do Registro para um servidor COM que já foi registrado.

  • Não exclua contas de usuário ou grupos que possam ser necessários para outros aplicativos em execução em uma versão diferente do .NET Framework.

  • Não adicione nada ao registro que contenha um caminho sem versão.

Número da versão do arquivo e número da versão do assembly

Versão do arquivo é um recurso de versão do Win32 que não é usado pelo tempo de execução. Em geral, você atualiza a versão do arquivo mesmo para uma atualização in-loco. Dois arquivos idênticos podem ter informações de versão de arquivo diferentes, e dois arquivos diferentes podem ter as mesmas informações de versão de arquivo.

A versão do assembly é usada pelo tempo de execução para a vinculação do assembly. Dois assemblies idênticos com números de versão diferentes são tratados como dois assemblies diferentes pelo tempo de execução.

A ferramenta Global Assembly Cache (Gacutil.exe) permite substituir um assembly quando apenas o número da versão do arquivo é mais recente. O instalador geralmente não é instalado sobre um assembly, a menos que o número da versão do assembly seja maior.

Consulte também