发布服务器配置

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

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

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

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

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

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

例如,安装以下 发布服务器配置文件 会将 Microsoft.Windows.SampleAssembly 版本 2.0.0.0 的绑定重定向到版本 2.0.1.0。 这会在 %systemDrive%\windows\winsxs\policies\x86_policy.2.0.Microsoft.Windows.SampleAssembly_75e377300ab7b886_x-ww_<hashvalue> 下添加名为 1.1.0.0.Policy 的新策略。

<?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.Windows.SampleAssembly 版本 2.0.0.0 的绑定重定向到版本 2.0.3.0。 这会在 %systemDrive%\windows\winsxs\policies\x86_policy.2.0.Microsoft.Windows.SampleAssembly_75e377300ab7b886_x-ww_<hashvalue> 下添加名为 2.1.0.0.Policy 的策略。

<?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>