Partilhar via


Compilando assemblies lado a lado do C/C++

assembly lado a lado é uma coleção do grupo de recursos - um DLL do windows, classificará, o servidor do, bibliotecas do tipo, ou interface- disponível para que um aplicativo a ser usado no tempo de execução. A vantagem principal de repackaging DLL em assemblies é que as várias versões dos assemblies podem ser usadas por aplicativos ao mesmo tempo e é possível atender os assemblies atualmente instalados no caso de uma versão de atualização.

Um aplicativo do Visual C++ pode usar um ou diversos DLL em diferentes partes do aplicativo. Em tempo de execução, as dlls são carregados em processo principal e o código necessário é executado. O aplicativo confiará no sistema operacional para localizar as dlls solicitados, entender o que outros DLL dependentes devem ser carregados no e carregado junto com a DLL solicitado. Nas versões de sistemas operacionais Windows anteriores ao Windows XP, 2003, Windows Server e Windows Vista, as pesquisas de carregador do sistema operacional para dlls dependentes na pasta local do aplicativo ou em outra pasta especificada no caminho do sistema. No Windows XP, no Windows Server 2003, e no Windows Vista, o carregador do sistema operacional também pode pesquisar por DLL dependentes usando um arquivo e uma pesquisa de manifesto para assemblies lado a lado que contêm esses DLL.

Por padrão, quando uma DLL é criado com o Visual Studio, tem manifesto de aplicativo inserido como um recurso de RT_MANIFEST com a ID igual a 2. Da mesma maneira que um executável, esse manifesto descreve dependências deste DLL em outros assemblies. Isso pressupõe que o DLL não faz parte de um assembly lado a lado e os aplicativos que dependem deste DLL não estão vai usar um manifesto de aplicativo para carregá-las, mas se baseiam no carregador do sistema operacional para localizar este DLL no caminho do sistema.

Dica

É importante para uma DLL que usa um manifesto de aplicativo para que o manifesto inserido como um recurso com a ID igual a 2.Se a DLL é carregado dinamicamente em tempo de execução (por exemplo, usando a função de LoadLibrary ), os assemblies dependentes das cargas de carregador do sistema operacional especificados no manifesto da DLL.Um manifesto de aplicativo externa para dlls não estiver marcado durante uma chamada de LoadLibrary .Se o manifesto não for inserido, o carregador pode tentar carregar versões incorretas de assemblies ou falha para localizar o para localizar os assemblies dependentes.

Um ou diversos DLL relacionado pode ser repackaged em um assembly lado a lado com manifesto do assemblycorrespondente, que descreve arquivos que formam o assembly bem como a dependência do assembly em outros assemblies lado a lado.

Dica

Se um assembly contém uma DLL, é recomendável inserir o manifesto do assembly neste DLL como um recurso com a ID igual a 1, e dá-se ao assembly privado o mesmo nome da DLL.Por exemplo, se o nome da DLL é mylibrary.dll, o valor do atributo de nome usado no <elemento de> assemblyIdentity de manifesto também pode ser mylibrary.Em alguns casos, quando uma biblioteca tem uma extensão diferente .dll (por exemplo, um projeto dos controles ActiveX MFC cria uma biblioteca de .ocx) um assembly externo que o manifesto pode ser criado.Nesse caso, o nome do assembly e o manifesto devem ser diferente do nome da DLL (por exemplo, MyAssembly, MyAssembly.manifest, e mylibrary.ocx).Mas ainda é recomendável renomear essas bibliotecas para ter o extension.dll e incorporar o manifesto como um recurso reduzir os custos de manutenção futuros desse assembly.Para obter mais informações sobre como o sistema operacional pesquisa pelos assemblies privados, consulte Assembly que pesquisa a sequência.

Essa alteração pode permitir a implantação da DLL correspondentes como assembly privado em uma pasta local do aplicativo ou como assembly compartilhado no cache de assembly WinSxS. Várias etapas tiverem que ser seguidas para obter o comportamento correto de tempo de execução desse novo assembly; são descritos em Diretrizes para criar assemblies lado a lado. Depois que um assembly é criado corretamente pode implantado como um assembly privado compartilhado ou junto com um aplicativo que depende deles. Ao instalar assemblies lado a lado como um assembly compartilhado, siga as diretrizes descritas em Instalando os assemblies do Win32 para compartilhar lado a lado no Windows XP ou usar módulos de mesclagem. Ao instalar assemblies lado a lado como um assembly privado, basta copie a DLL, os recursos correspondentes e o manifesto do assembly como parte do processo de instalação para a pasta local do aplicativo no computador de destino, garantindo que esse assembly pode ser localizado pelo carregador em tempo de execução (consulte Assembly que pesquisa a sequência). Outro modo é usar O Windows Installer e siga as diretrizes descritas em Instalando os assemblies do Win32 para uso particular de um aplicativo no Windows XP.

Consulte também

Conceitos

Exemplos de implantação

Compilando aplicativos isolados do C/C++

Outros recursos

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