Compartilhar via


Criando conjuntos de C/C++ lado a lado

A lado a lado assembly é uma coleção de recursos — um grupo de DLLs, classes do windows, COM servidores, bibliotecas de tipos ou interfaces — disponível para um aplicativo para usar em tempo de execução.A principal vantagem de remontagem de DLLs em assemblies é que várias versões de módulos (assemblies) podem ser usadas por aplicativos ao mesmo tempo e é possível composições de serviço instalado no momento no caso de uma versão de atualização.

Um aplicativo do Visual C++ pode usar uma ou várias DLLs em diferentes partes do aplicativo.Em 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 o que tem outras DLLs dependentes ser carregado e, em seguida, carregá-los juntamente 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 em outra pasta especificada no caminho do sistema ou a pasta local do aplicativo.No Windows XP, Windows Server 2003 e Windows Vista, o carregador do sistema operacional também pode procurar por DLLs dependentes usando um de manifesto arquivo e procurar conjuntos de módulos lado a lado que contêm essas DLLs.

Por padrão, quando uma DLL é construída com Visual Studio, ele tem um o manifesto de aplicativo incorporado como um recurso RT_MANIFEST com ID igual a 2.Como por 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 lado a lado e aplicativos que dependem dessa DLL não for usar um manifesto de aplicativo para carregá-lo, mas em vez disso, contam com o carregador do sistema operacional para localizar essa DLL no caminho do sistema.

ObservaçãoObservação

É importante para uma DLL que usa um manifesto de aplicativo para que o manifesto incorporado como um recurso com ID igual a 2.Se a DLL é carregada dinamicamente em tempo de execução (por exemplo, usando o LoadLibrary função), o carregador do sistema operacional carrega os assemblies dependentes especificados no manifesto da DLL.Um manifesto de aplicativo externo para DLLs não é verificado durante um LoadLibrary de chamada.Se o manifesto não estiver incorporado, o carregador pode tentar carregar versões incorretas de módulos (assemblies) ou falha ao localizar para encontrar conjuntos de módulos dependentes.

Um ou vários relacionados DLLs podem ser reagrupadas em um assembly lado a lado com um correspondente manifesto do assembly, que descreve os arquivos que formam o assembly, bem como a dependência do assembly em outros conjuntos de módulos lado a lado.

ObservaçãoObservação

Se um assembly contém uma DLL, é recomendável para incorporar o manifesto do assembly essa DLL como um recurso com ID igual a 1 e dar o assembly particular o mesmo nome que a DLL.Por exemplo, se o nome da DLL MyLibrary. dll, que o valor do atributo name usado no <assemblyIdentity> elemento do manifesto também pode ser mylibrary.Em alguns casos, quando uma biblioteca possui uma extensão diferente. dll (por exemplo, um projeto de controles do MFC ActiveX cria uma biblioteca. ocx) um manifesto do assembly externo pode ser criado.Nesse caso, o nome do assembly e manifesto deve ser diferente do nome da DLL (por exemplo, MyAssembly, MyAssembly.manifest e mylibrary.ocx).No entanto ainda é recomendável renomear essas bibliotecas para que o extension.dll e incorporar o manifesto como um recurso para reduzir o custo de manutenção futura deste assembly.Para obter mais informações sobre como o sistema operacional procura os conjuntos privados, consulte A seqüência de pesquisa de Assembly.

Essa alteração pode permitir a implantação de DLLs correspondentes como um assembly particular em uma pasta local do aplicativo ou como um assembly compartilhado no cache de assemblies WinSxS.Várias etapas que precisam ser seguidas para alcançar o comportamento de tempo de execução corretos deste novo assembly; eles estão descritos em as diretrizes para criar Assemblies de lado a lado.Depois de um assembly foi criado corretamente ele pode ser implantado como um assembly de compartilhado ou particular em conjunto com um aplicativo que depende dele.Ao instalar assemblies lado a lado como um assembly compartilhado, você pode tanto siga as diretrizes descritas no Instalando os Assemblies de Win32 para o compartilhamento lado a lado no Windows XP ou use módulos de mesclagem.Ao instalar assemblies lado a lado como um assembly particular, você pode apenas copiar o manifesto DLL, recursos e o assembly correspondente como parte do processo de instalação para a pasta local do aplicativo no computador de destino, garantindo que este assembly pode ser encontrado pelo carregador de em tempo de execução (consulte A seqüência de pesquisa de Assembly).Outra maneira é usar o Do Windows Installer e siga as diretrizes descritas no Instalar Assemblies do Win32 para o uso particular de um aplicativo no Windows XP.

Consulte também

Conceitos

Exemplos de implantação

C/C++ de criação de aplicativos isolados

Outros recursos

Criação de C/C++ aplicativos isolados e montagens lado a lado