Atualização de assemblies
As informações neste tópico identificam as diretrizes recomendadas para atualizar assemblies usando patches do Windows Installer.
Os autores de atualizações de assemblagens podem usar as seguintes diretrizes, que se aplicam a todos os tipos de assemblagens.
- O método recomendado para atualizar uma configuração é alterar o nome forte da configuração na tabela MsiAssemblyName. A nova versão de montagem pode ser fornecida por um novo componente ou pelo mesmo componente que fornece a versão antiga.
- Se a nova versão do assembly for fornecida pelo mesmo componente, não altere o tipo de assembly de um assembly do .NET Framework para um assembly do Win32 ou vice-versa.
- Se todos os aplicativos no sistema precisarem usar o assembly atualizado, você deverá implantar um assembly de política. Um assembly de política pode redirecionar aplicativos no sistema para usar a nova versão do assembly. Os assembleias de política devem ser criados criando um novo componente.
- O Windows Installer 3.0 ou posterior é necessário para desinstalar atualizações de assembly. Para obter mais informações, consulte Removendo patches.
- A versão mais recente do assembly deve conter as mesmas versões ou versões superiores de arquivos de assemblies lançados anteriormente.
- O Windows Installer 3.0 pode atualizar assemblies do .NET Framework e Win32 usando substituição completa de ficheiros ou uma atualização delta menor. Para obter mais informações, consulte reduzindo o tamanho do patch.
- Se a atualização alterar o nome forte do assembly, a tabela MsiPatchOldAssemblyFile e a tabela MsiPatchOldAssemblyName serão necessárias se o pacote de patch não tiver uma tabela MsiPatchSequence. A tabela MsiPatchOldAssemblyFile e a tabela MsiPatchOldAssemblyName não são necessárias se o pacote de patch tiver informações de sequenciamento de patches em uma tabela MsiPatchSequence.
- Antes de lançar um novo patch, teste o patch aplicando-o com todos os patches lançados anteriormente.
Atualizando assemblies do Win32
Use as seguintes diretrizes ao atualizar assemblies Win32:
- Altere o nome forte do novo assembly especificado na tabela MsiAssemblyName.
- Se você quiser que seu aplicativo sempre use a nova versão do assembly sem afetar a versão do assembly usada por outros aplicativos no sistema, use o mesmo componente para conter a nova versão do assembly que você usou para a versão antiga do assembly. Mantenha o mesmo ComponentId na tabela Component. Depois que seu aplicativo é corrigido, ele contém apenas uma referência à nova versão do assembly. A versão antiga do assembly pode permanecer com a nova versão no cache de assembly global. Isso não afeta outros aplicativos no sistema que usam a versão antiga do assembly. Quando o mesmo componente é utilizado nas versões antiga e nova da assemblagem, a sua atualização pode ser um patch delta mais pequeno.
- Se a nova versão do assembly não for compatível com todos os sistemas nos quais você deseja instalar seu aplicativo, você poderá instalar as versões nova e antiga do assembly como assemblies lado a lado. Para instalar ambas as versões de assembly lado a lado, crie um novo componente para conter a nova versão de assembly. O ComponentId na tabela Component para o novo componente deve ser diferente do ComponentId do componente com a versão antiga. Depois que seu aplicativo é corrigido, ele mantém referências a ambas as versões de assembly. Em seguida, a aplicação pode ser direcionada para a versão compatível do conjunto através de um manifesto. Quando componentes diferentes são usados para as versões nova e antiga do assembly, sua atualização usa a substituição completa do arquivo.
Atualizando assemblies do .NET Framework
Use as diretrizes a seguir ao atualizar assemblies do .NET Framework.
Altere o nome forte do novo conjunto especificado na tabela MsiAssemblyName.
Se você quiser que seu aplicativo sempre use a nova versão do assembly sem afetar a versão do assembly usada por outros aplicativos no sistema, altere o nome forte do novo assembly especificado na tabela MsiAssemblyNamee use o mesmo componente para conter a nova versão do assembly que você usou para a versão antiga do assembly. Mantenha o mesmo ComponentId na tabela Component. Depois que seu aplicativo é corrigido, ele contém apenas uma referência à nova versão do assembly. A versão antiga do assembly pode permanecer com a nova versão no cache global. Isso não afeta outros aplicativos no sistema que usam a versão antiga do assembly. Quando o mesmo componente é usado para as versões nova e antiga do assembly, sua atualização pode ser um patch delta menor.
Se a nova versão do assembly não for compatível com todos os sistemas nos quais você deseja instalar seu aplicativo, você poderá instalar as versões nova e antiga do assembly como assemblies lado a lado. Para instalar ambas as versões de assembly lado a lado, altere o nome forte do novo assembly especificado na tabela MsiAssemblyNamee crie um novo componente para conter a nova versão do assembly. O ComponentId na tabela Component para o novo componente deve ser diferente do ComponentId do componente com a versão antiga. Depois que seu aplicativo é corrigido, ele mantém referências a ambas as versões de assembly. A aplicação pode então ser direcionada para a versão compatível da assemblagem por um manifesto. Quando componentes diferentes são usados para as versões nova e antiga do assembly, sua atualização usa a substituição completa do arquivo.
Uma atualização no local substitui a cópia de um assembly do .NET Framework no cache global de assemblies. Esse tipo de atualização de assemblagem não altera o nome robusto da assemblagem. Somente o valor no campo FileVersion da tabela MsiAssemblyName é alterado. A atualização in-loco de um assembly do .NET Framework requer o .NET Framework 1.1 SP1 ou superior.
Observação
O tipo de atualização no local substitui a cópia do assembly no cache global e pode comprometer outros aplicativos se a nova versão do assembly não for completamente compatível com versões anteriores. O método recomendado para atualizar um assembly é alterar o nome forte do assembly na tabela MsiAssemblyName.