Compartilhar via


Corrigir um aplicativo existente usando um assembly privado

A partir do Windows XP, você pode criar um assembly privado e disponibilizá-lo para um aplicativo específico. Essa funcionalidade pode ser usada para corrigir um aplicativo que se torna incompatível com uma atualização. Um exemplo seria um aplicativo que se torna incompatível com a versão mais recente do MSVCRT.DLL depois de atualizar o sistema operacional. Nesse caso, você não tem a opção de substituir a versão do sistema porque MSVCRT.DLL é um arquivo protegido pelo Windows. Em vez de precisar reescrever o aplicativo para trabalhar com a nova versão do MSVCRT, você pode criar um assembly privado para MSVCRT e instalá-lo na pasta do aplicativo. Observe que nem todos os componentes compartilhados são candidatos adequados para um assembly privado lado a lado e alguns componentes têm restrições de licenciamento sobre onde seus componentes podem ser instalados. O componente precisa atender aos critérios de um componente lado a lado. Pergunte ao editor do componente se ele pode fornecer um assembly adequado.

O manifesto do assembly privado e o manifesto do aplicativo devem ser instalados na mesma pasta que o executável do aplicativo. Quando o aplicativo é executado, ele consulta o manifesto do aplicativo e carrega a versão do MSVCRT que é privada para o aplicativo.

Para este exemplo, o assembly privado incluiria MSVCRT.DLL e MSVCIRT.DLL como no seguinte manifesto do assembly:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32"
      name="Microsoft.Windows.PrivateCPlusPlusRuntime" 
version="6.0.0.0" 
processorArchitecture="x86"/>
    <file name="msvcrt.dll"/>
    <file name="msvcirt.dll"/>
</assembly>

Veja a seguir um exemplo de um possível manifesto do aplicativo.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity 
    version="1.0.0.0" 
    processorArchitecture="x86" 
    name="APPLICATION" 
    type="win32" 
/> 
<description>Description of Application</description> 
<dependency> 
    <dependentAssembly> 
       <assemblyIdentity 
           type="win32"
           name="Microsoft.Windows.PrivateCPlusPlusRuntime" 
           version="6.0.0.0" 
           processorArchitecture="x86"/> 
    </dependentAssembly> 
</dependency> 
</assembly>