Compartilhar via


Configuração do Publicador

Um arquivo de configuração do editor redireciona globalmente aplicativos e assemblies com uma dependência de uma versão de um assembly lado a lado para usar outra versão do mesmo assembly. Isso permite que aplicativos e assemblies usem o assembly atualizado sem precisar recompilar todos os aplicativos afetados.

Os arquivos de configuração do publicador podem ser fornecidos pelo editor de um assembly ao emitir uma nova versão do assembly com correções de bug ou atualizações de segurança compatíveis. A versão atualizada deve ser totalmente compatível com versões anteriores. Um arquivo de configuração do editor nunca deve ser usado para adicionar novos recursos, a menos que a atualização seja totalmente compatível com versões anteriores. Os arquivos de configuração do publicador nunca devem ser usados para incrementar a versão principal ou secundária de um assembly. Por exemplo, não redirecione o assembly versão 6.0.0.0 para 7.0.0.0 ou para 6.1.0.0.

Os arquivos de configuração do publicador só devem ser emitidos pelo editor do assembly. Os desenvolvedores de assembly devem assinar assemblies lado a lado compartilhados e arquivos de configuração do editor. Use a mesma chave para assinar o assembly e os arquivos de configuração do editor associados. Os arquivos de configuração do publicador devem ser assinados usando as mesmas ferramentas usadas para assemblies, consulte Exemplo de assinatura de assembly e Criação de arquivos e catálogos assinados.

Normalmente, a nova versão de um assembly e o arquivo de configuração do editor associado serão instalados em uma atualização de service pack. Os arquivos de configuração do publicador nunca devem ser fornecidos com aplicativos como um redistribuível porque a instalação de um arquivo de configuração do editor redireciona globalmente assemblies no sistema. Se o assembly que está sendo atualizado for fornecido como um redistribuível, o editor deverá fornecer ambos os itens a seguir.

  • Um pacote do Windows Installer (arquivo .msi) que inclui a nova versão do assembly com a configuração do editor. Isso pode ser instalado como um service pack ou QFE porque, nesse caso, o cliente optou por atualizar globalmente o sistema. Esta versão do pacote nunca deve ser instalada por aplicativos.
  • Um módulo de mesclagem do Windows Installer (arquivo .msm) que inclui apenas a nova versão do assembly. Essa versão pode ser incluída com aplicativos.

Os aplicativos que exigem uma versão mínima do assembly devem declarar sua dependência na versão mínima, se a versão mínima não estiver disponível em um sistema, o aplicativo não será iniciado. Se ele estiver disponível como um redistribuível, ele deverá ser incluído na configuração do aplicativo.

Por exemplo, instalar o arquivo de configuração do editor a seguir redireciona a associação da versão 2.0.0.0 do Microsoft.Windows.SampleAssembly para a versão 2.0.1.0. Isso adiciona uma nova política, chamada 1.1.0.0.Policy, em %systemDrive%\windows\winsxs\policies\x86_policy.2.0.Microsoft.Windows.SampleAssembly_75e377300ab7b886_x-ww_<hashvalue>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity type="win32-policy" publicKeyToken="0000000000000000" name="policy.2.0.Microsoft.Windows.SampleAssembly" version="1.1.0.0" processorArchitecture="x86"/>
   <dependency>
      <dependentAssembly>
         <assemblyIdentity type="win32" name="Microsoft.Windows.SampleAssembly"  processorArchitecture="x86" publicKeyToken="75e377300ab7b886"/>
         <bindingRedirect oldVersion="2.0.0.0" newVersion="2.0.1.0"/>
      </dependentAssembly>
   </dependency>
</assembly>

Instalar o arquivo de configuração do editor a seguir para o mesmo assembly redireciona a associação da versão 2.0.0.0 do Microsoft.Windows.SampleAssembly para a versão 2.0.3.0. Isso adiciona outra política, chamada 2.1.0.0.Policy, em %systemDrive%\windows\winsxs\policies\x86_policy.2.0.Microsoft.Windows.SampleAssembly_75e377300ab7b886_x-ww_<hashvalue>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity type="win32-policy" publicKeyToken="0000000000000000" name="policy.2.0.Microsoft.Windows.SampleAssembly" version="2.1.0.0" processorArchitecture="x86"/>
   <dependency>
      <dependentAssembly>
         <assemblyIdentity type="win32" name="Microsoft.Windows.SampleAssembly"  processorArchitecture="x86" publicKeyToken="75e377300ab7b886"/>
         <bindingRedirect oldVersion="2.0.0.0" newVersion="2.0.3.0"/>
      </dependentAssembly>
   </dependency>
</assembly>