Publisher配置

发布者配置文件全局重定向依赖于并行程序集的一个版本的应用程序和程序集,以使用同一程序集的另一个版本。 这使应用程序和程序集能够使用更新的程序集,而无需重新生成所有受影响的应用程序。

Publisher发布具有兼容 bug 修复或安全更新的程序集新版本时,程序集的发布者可能会提供配置文件。 更新的版本应完全向后兼容。 除非更新完全向后兼容,否则不应使用发布者配置文件来添加新功能。 Publisher配置文件不应用于递增程序集的主版本或次要版本。 例如,不要将程序集版本 6.0.0.0 重定向到 7.0.0.0 或 6.1.0.0。

Publisher配置文件只能由程序集的发布者颁发。 程序集开发人员应对共享的并行程序集和发布者配置文件进行签名。 使用相同的密钥对程序集和关联的发布者配置文件进行签名。 Publisher配置文件应使用与程序集相同的工具进行签名,请参阅程序集签名示例创建签名文件和目录

通常,新版本的程序集和关联的发布者配置文件将安装在 Service Pack 更新中。 不应将应用程序作为可再发行组件提供Publisher配置文件,因为安装发布者配置文件会全局重定向系统上的程序集。 如果更新的程序集作为可再发行组件提供,发布者应提供以下两项。

  • Windows安装程序包 (.msi 文件) ,其中包含具有发布服务器配置的程序集的新版本。 这可以安装为 Service Pack 或 QFE,因为在这种情况下,客户已选择全局更新系统。 应用程序不应安装此版本的包。
  • Windows Installer 合并模块 (.msm 文件) ,仅包含新版本的程序集。 此版本可能包含在应用程序中。

需要最低版本的程序集的应用程序应将其依赖项声明为最低版本,如果最低版本在系统上不可用,则应用程序将无法启动。 如果作为可再发行组件提供,则应将其包含在应用程序设置中。

例如,安装以下发布者配置文件会从 Microsoft 版本 2.0.0.0 重定向绑定。Windows。SampleAssembly 到版本 2.0.1.0。 这会在 %systemDrive%\windows\winsxs\policies\x86_policy.2.0.Microsoft 下添加名为 1.1.0.0.Policy 的新策略。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>

为同一程序集安装以下发布者配置文件会从 Microsoft 版本 2.0.0.0 重定向绑定。Windows。SampleAssembly 到版本 2.0.3.0。 这会在 %systemDrive%\windows\winsxs\policies\x86_policy.2.0.Microsoft 下添加名为 2.1.0.Policy 的另一个策略。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>