Publisher組態

發行者組態檔會全域重新導向相依于一個版本並存元件的應用程式和元件,以使用相同元件的另一個版本。 這可讓應用程式和元件使用更新的元件,而不需要重建所有受影響的應用程式。

當發行具有相容錯誤修正或安全性更新的新版本元件時,Publisher組態檔可由元件的發行者提供。 更新的版本應該與回溯相容。 除非更新完全相容,否則發行者組態檔絕對不應該用來新增功能。 Publisher組態檔不應該用來遞增元件的主要或次要版本。 例如,請勿將元件版本 6.0.0.0 重新導向至 7.0.0.0 或 6.1.0.0。

Publisher組態檔只能由元件的發行者發出。 元件開發人員應該簽署共用的並存元件和發行者組態檔。 使用相同的金鑰簽署元件和相關聯的發行者組態檔。 Publisher組態檔應該使用與元件所使用的相同工具來簽署,請參閱元件簽署範例建立簽署的檔案和目錄

一般而言,新版本的元件和相關聯的發行者組態檔將會安裝在 Service Pack 更新中。 因為安裝發行者組態檔會全域重新導向系統上的元件,所以Publisher組態檔絕不應以可轉散發套件的形式提供應用程式。 如果更新的元件是以可轉散發套件的形式提供,發行者應該提供下列兩者。

  • Windows安裝程式套件 (.msi 檔案) ,其中包含具有發行者組態的新版本元件。 這可能會安裝為 Service Pack 或 QFE,因為在此情況下,客戶已選擇全域更新系統。 應用程式不應安裝此版本的套件。
  • Windows安裝程式合併模組 (.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>