Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um assembly lado a lado é uma coleção de recursos — um grupo de DLLs, classes Windows, servidores COM, bibliotecas de tipos ou interfaces — disponíveis para uma aplicação utilizar em tempo de execução. A principal vantagem de reempacotar DLLs em assemblies é que várias versões de assemblies podem ser usadas por aplicativos ao mesmo tempo e é possível atender assemblies atualmente instalados no caso de uma versão de atualização.
Um aplicativo C++ pode usar uma ou várias DLLs em diferentes partes do aplicativo. No tempo de execução, as DLLs são carregadas no processo principal e o código necessário é executado. O aplicativo depende do sistema operacional para localizar as DLLs solicitadas, entender quais outras DLLs dependentes devem ser carregadas e, em seguida, carregá-las junto com a DLL solicitada. Em versões de sistemas operacionais Windows anteriores ao Windows XP, Windows Server 2003 e Windows Vista, o carregador do sistema operacional procura DLLs dependentes na pasta local do aplicativo ou em outra pasta especificada no caminho do sistema. No Windows XP, Windows Server 2003 e Windows Vista, o carregador do sistema operacional também pode procurar DLLs dependentes usando um arquivo de manifesto e procurar assemblies lado a lado que contenham essas DLLs.
Por padrão, quando uma DLL é criada com o Visual Studio, ela tem um manifesto de aplicativo incorporado como um recurso de RT_MANIFEST com ID igual a 2. Assim como para um executável, esse manifesto descreve dependências dessa DLL em outros assemblies. Isso pressupõe que a DLL não faz parte de um assembly em paralelo e os aplicativos que dependem dessa DLL não usarão um manifesto de aplicativo para carregá-la, mas dependerão do carregador do sistema operacional para localizar essa DLL no path do sistema.
Observação
É importante que uma DLL que usa um manifesto de aplicativo tenha o manifesto incorporado como um recurso com ID igual a 2. Se a DLL for carregada dinamicamente em tempo de execução (por exemplo, usando a função LoadLibrary ), o carregador do sistema operacional carregará assemblies dependentes especificados no manifesto da DLL. Um manifesto de aplicativo externo para DLLs não é verificado durante uma LoadLibrary chamada. Se o manifesto não estiver incorporado, o carregador pode tentar carregar versões incorretas de montagens ou não conseguir localizar montagens dependentes.
Uma ou várias DLLs relacionadas podem ser reempacotadas em um assembly lado a lado com um manifesto de assembly correspondente, que descreve quais arquivos formam o assembly, bem como a dependência do assembly em outros assemblies lado a lado.
Observação
Se um assembly contiver uma DLL, é recomendável incorporar o manifesto do assembly nessa DLL como um recurso com ID igual a 1 e dar ao assembly privado o mesmo nome que a DLL. Por exemplo, se o nome da DLL for mylibrary.dll, o valor do atributo name usado no <elemento assemblyIdentity> do manifesto também pode ser "mylibrary". Em alguns casos, quando uma biblioteca tem uma extensão diferente de .dll (por exemplo, um projeto de controles ActiveX MFC cria uma biblioteca .ocx), um manifesto de assembly externo pode ser criado. Nesse caso, o nome da assemblagem e seu manifesto devem ser diferentes do nome da DLL (por exemplo, MyAssembly, MyAssembly.manifest e mylibrary.ocx). No entanto, ainda é recomendado renomear essas bibliotecas para ter o extension.dll e incorporar o manifesto como um recurso para reduzir o custo futuro de manutenção desta montagem. Para obter mais informações sobre como o sistema operacional procura assemblies privados, consulte Assembly Searching Sequence.
Essa alteração pode permitir a implantação de DLLs correspondentes como um assembly privado em uma pasta local do aplicativo ou como um assembly compartilhado no cache de assembly WinSxS. Várias etapas devem ser seguidas para obter o comportamento correto em tempo de execução deste novo assembly; as quais são descritas em Diretrizes para a criação de assemblies lado a lado. Depois que um assembly é criado corretamente, ele pode ser implantado como um assembly compartilhado ou privado junto com um aplicativo que depende dele. Ao instalar assemblies lado a lado como um assembly compartilhado, você pode seguir as diretrizes descritas em Instalando assemblies Win32 para compartilhamento lado a lado no Windows XP ou usar módulos de mesclagem. Ao instalar assemblies lado a lado como um assembly privado, pode-se simplesmente copiar a DLL, os recursos e o manifesto do assembly correspondentes como parte do processo de instalação para a pasta local da aplicação no computador de destino, garantindo que esse assembly possa ser encontrado pelo carregador em tempo de execução (consulte Assembly Searching Sequence). Outra maneira é usar o Windows Installer e seguir as diretrizes descritas em Instalando assemblies Win32 para o uso privado de um aplicativo no Windows XP.
Ver também
Criando aplicativos isolados C/C++
Criando aplicativos isolados C/C++ e montagens lado a lado