Atualizando 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 assembly podem usar as seguintes diretrizes, que se aplicam a todos os tipos de assemblies:

  • O método recomendado para atualizar um assembly é alterar o nome forte do assembly na tabela MsiAssemblyName. A nova versão do assembly 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 .NET Framework para um assembly 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 assemblies de política devem ser fornecidos pela criação de um novo componente.
  • O Windows Installer 3.0 ou posterior é exigido para desinstalar atualizações de assembly. Para obter mais informações, confira 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 atender a assemblies .NET Framework e Win32 com uma substituição de arquivo completa ou com uma atualização delta menor. Para obter mais informações, confira Reduzindo o tamanho do patch.
  • Se a atualização alterar o nome forte do assembly, as tabelas MsiPatchOldAssemblyFile e MsiPatchOldAssemblyName serão obrigatórias se o pacote de patch não tiver uma tabela MsiPatchSequence . A tabela MsiPatchOldAssemblyFile e a tabela MsiPatchOldAssemblyName não serão necessárias se o pacote de patch tiver informações de sequenciamento de patch em uma tabela MsiPatchSequence.
  • Antes de liberar um novo patch, teste o patch aplicando-o com todos os patches lançados anteriormente.

Atualizando assemblies Win32

Use as seguintes diretrizes na hora de 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 a mesma ComponentId na tabela Component. Depois que o aplicativo for corrigido, ele conterá 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 é usado para as versões novas e antigas 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 o aplicativo, você poderá instalar as versões novas e antigas do assembly como assemblies lado a lado. Para instalar as duas versões do assembly lado a lado, crie um componente para conter a nova versão do assembly. A ComponentId na tabela Component do novo componente deve ser diferente da ComponentId do componente com a versão antiga. Depois que o aplicativo é corrigido, ele mantém referências a ambas as versões do assembly. Em seguida, o aplicativo pode ser direcionado para a versão compatível do assembly por um manifesto. Quando componentes diferentes são usados nas versões novas e antigas do assembly, sua atualização usa a substituição completa de arquivo.

Atualizando assemblies .NET Framework

Use as diretrizes a seguir para atualizar assemblies .NET Framework.

  • 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, altere o nome forte do novo assembly especificado na tabela MsiAssemblyName e use o mesmo componente para conter a nova versão do assembly que você usou para a versão antiga do assembly. Mantenha a mesma ComponentId na tabela Component. Depois que o aplicativo for corrigido, ele conterá 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 novas e antigas 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 o aplicativo, você poderá instalar as versões novas e antigas do assembly como assemblies lado a lado. Para instalar as duas versões do assembly lado a lado, altere o nome forte do novo assembly especificado na tabela MsiAssemblyName e crie um componente para conter a nova versão do assembly. A ComponentId na tabela Component do novo componente deve ser diferente da ComponentId do componente com a versão antiga. Depois que o aplicativo é corrigido, ele mantém referências a ambas as versões do assembly. O aplicativo pode, então, ser direcionado para a versão compatível do assembly por um manifesto. Quando componentes diferentes são usados nas versões novas e antigas do assembly, sua atualização usa a substituição completa de arquivo.

  • Uma atualização local substitui a cópia de um Assembly .NET Framework no cache de assembly global. Esse tipo de atualização de assembly não altera o nome forte do assembly. Somente o valor no campo FileVersion da tabela MsiAssemblyName é alterado. A atualização local de um assembly .NET Framework requer .NET Framework 1.1 SP1 ou superior.

    Observação

    O tipo de atualização local substitui a cópia do assembly no cache global e pode interromper outros aplicativos quando a nova versão do assembly não é completamente compatível com versões anteriores. O método recomendado para atualizar um assembly é alterar o nome forte do assembly na tabela MsiAssemblyName.