Partilhar via


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

Observação

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 runtime usa a cache global de assembly para proporcionar armazenamento que reconhece versões. O armazenamento global de assembly é uma estrutura de diretório compatível com versões instalada em cada computador que utiliza o .NET Framework. Os conjuntos instalados na cache de assembly global não são substituídos quando uma nova versão do mesmo 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 dependente 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.

  • Torne objetos do kernel nomeados específicos da versão para que uma condição de competição não ocorra. Por exemplo, uma condição de corrida ocorre quando dois semáforos de duas versões da mesma aplicação aguardam um pelo 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 ficheiro e número da versão do módulo

A versão de arquivo é um recurso de versão do Win32 que não é utilizado pelo runtime. Em geral, actualiza-se a versão do ficheiro mesmo para uma atualização no local. 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 conjuntos idênticos com números de versão diferentes são tratados como dois conjuntos distintos 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 instala por cima de um assembly, a menos que o número da versão do assembly seja maior.

Ver também