Conceitos de aplicativos isolados e assemblies lado a lado

Um aplicativo será considerado um aplicativo isolado se todos os respectivos componentes forem assemblies lado a lado. Um assembly lado a lado é uma coleção de recursos – um grupo de DLLs, classes windows, servidores COM, bibliotecas de tipos ou interfaces – que são implantados juntos e disponibilizados para um aplicativo usar no tempo de execução. Normalmente, um assembly lado a lado é um para várias DLLs.

Compartilhado ou particular

Um assembly lado a lado pode ser compartilhado ou particular. Assemblies lado a lado compartilhados podem ser usados por vários aplicativos que especificam, nos manifestos, uma dependência no assembly. Várias versões de um assembly lado a lado podem ser compartilhadas por aplicativos diferentes que são executados ao mesmo tempo. Um assembly privado é um assembly implantado com um aplicativo para uso exclusivo do aplicativo. Os assemblies particulares são instalados na pasta que contém o arquivo executável do aplicativo ou uma de suas subpastas.

Manifestos e ordem de pesquisa

Ambos os aplicativos isolados e assemblies lado a lado são descritos por manifestos. Um manifesto é um documento XML que pode ser um arquivo externo ou pode ser inserido em um aplicativo ou em um assembly como um recurso. O arquivo de manifesto de um aplicativo isolado é usado para gerenciar os nomes e as versões dos assemblies lado a lado compartilhados aos quais o aplicativo deve se associar no tempo de execução. O manifesto de um assembly lado a lado especifica nomes, versões, recursos e os assemblies dependentes de assemblies lado a lado. Para um assembly lado a lado compartilhado, seu manifesto é instalado na pasta %WINDIR%\WinSxS\Manifests\. No caso de um assembly particular, recomendamos que você inclua seu manifesto na DLL como um recurso que tenha uma ID igual a 1. Você também pode dar ao assembly particular o mesmo nome da DLL. Para obter mais informações, consulte Sobre assemblies privados.

No momento da execução, o Windows usa as informações do assembly do manifesto do aplicativo para procurar e carregar o assembly lado a lado correspondente. Se um aplicativo isolado especificar uma dependência do assembly, o sistema operacional procura pelo assembly primeiro entre os assemblies compartilhados em cache de assembly nativo na pasta %WINDIR%\WinSxS\. Se o assembly necessário não for localizado, o sistema operacional procurará um assembly particular em uma pasta da estrutura de diretórios do aplicativo. Para obter mais informações, consulte Sequência de pesquisa de assembly.

Alterando dependências

É possível alterar as dependências de assembly lado a lado após a implantação de um aplicativo modificando os Arquivos de configuração de editor e os Arquivos de configuração de aplicativo. Um arquivo de configuração do editor, também conhecido como um arquivo de política do editor, é um arquivo XML que redireciona globalmente aplicativos e assemblies do uso de uma versão de um assembly lado a lado para o uso de outra versão do mesmo assembly. Por exemplo, você poderia alterar uma dependência quando uma correção de bug ou de segurança é implantada para um assembly lado a lado e você deseja redirecionar todos os aplicativos para usar a versão corrigida. Um arquivo de configuração do aplicativo é um arquivo XML que redireciona um aplicativo específico do uso de uma versão de um assembly lado a lado para o uso de outra versão do mesmo assembly. Você pode usar um arquivo de configuração do aplicativo para redirecionar um aplicativo específico para usar uma versão de um assembly lado a lado que seja diferente daquela definida no arquivo de configuração do editor. Para obter mais informações, confira Configuração.

Bibliotecas do Visual C++

No Visual Studio 2005 e no Visual Studio 2008, as bibliotecas redistribuíveis como ATL, MFC, CRT, C++ padrão, OpenMP e MSDIA foram implantadas como assemblies lado a lado compartilhados no cache de assembly nativo. Na versão atual, as bibliotecas redistribuíveis usam a implantação central. Por padrão, todos os aplicativos compilados usando o Visual Studio são compilados com o manifesto inserido no binário final e o manifesto descreve as dependências do binário nas bibliotecas do Visual C++. Para reconhecer a geração de manifesto para aplicativos C++, consulte Reconhecimento de geração de manifesto para programas C/C++. Um manifesto não é necessário para aplicativos que são vinculados estaticamente às bibliotecas que eles usam, ou que usam a implantação local. Para saber mais sobre implantação, confira Implantação no Visual C++.

Confira também

Compilando aplicativos isolados do C/C++ e assemblies lado a lado