共用方式為


如何:建立發行者原則

注意

本文專屬於 .NET Framework。 其不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。

組件的廠商可以藉由加入具有升級組件的發行者原則檔,表示應用程式應使用較新版的組件。 發行者原則檔會指定組件重新導向和程式碼基底設定,並使用與應用程式組態檔相同的格式。 發行者原則檔案會編譯成組件,並放在全域組件快取中。

建立發行者原則有三個步驟:

  1. 建立發行者原則檔。

  2. 建立發行者原則組件。

  3. 將發行者原則組件新增至全域組件快取。

發行者原則結構描述的描述位於重新導向組件版本。 下列範例顯示發行者原則檔案,將某個 myAssembly 版本重新導向至另一個版本。

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <!-- Redirecting to version 2.0.0.0 of the assembly. -->
         <bindingRedirect oldVersion="1.0.0.0"
                          newVersion="2.0.0.0"/>
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

若要了解如何指定程式碼基底,請參閱指定組件的位置

建立發行者原則組件

使用組件連結器 (Al.exe) 建立發行者原則組件。

若要建立發行者原則組件

在命令提示字元鍵入下列命令:

al /link:publisherPolicyFile /out:publisherPolicyAssemblyFile /keyfile:keyPairFile /platform:processorArchitecture

在這個命令中:

  • publisherPolicyFile 引數是發行者原則檔的名稱。

  • publisherPolicyAssemblyFile 引數是從此命令產生的發行者原則組件名稱。 組件檔案名稱必須遵循以下格式:

    'policy.majorNumber.minorNumber.mainAssemblyName.dll'

  • keyPairFile 引數是包含金鑰組的檔案名稱。 您必須使用相同的金鑰組簽署組件和發行者原則組件。

  • processorArchitecture 引數會識別以處理器特定組件為目標的平台。

    注意

    從 .NET Framework 2.0 開始,可以使用以特定處理器結構為目標的功能。

從 .NET Framework 2.0 開始,可以使用以特定處理器結構為目標的功能。 下列命令會從名為 pub.config 的發行者原則檔案建立名為 policy.1.0.myAssembly 的發行者原則組件,並使用 sgKey.snk 檔案中的金鑰組將強式名稱指派給組件,並指定組件以 x86 處理器結構為目標。

al /link:pub.config /out:policy.1.0.myAssembly.dll /keyfile:sgKey.snk /platform:x86

發行者原則組件必須符合其所套用組件的處理器結構。 因此,如果組件具有 MSILProcessorArchitecture 值,則必須使用 /platform:anycpu 建立該組件的發行者原則組件。 您必須為每個處理器特定組件提供個別的發行者原則組件。

此規則的結果是若要變更組件的處理器結構,您必須變更版本號碼的主要或次要元件,以便提供具有正確處理器結構的新發行者原則組件。 一旦組件具有不同的處理器結構,舊的發行者原則組件就無法為組件提供服務。

另一個結果是,2.0 版連結器無法用來為使用舊版 .NET Framework 編譯的組件建立發行者原則組件,因為其一律會指定處理器結構。

將發行者原則組件新增至全域組件快取

使用全域組件快取 (Gacutil.exe) 工具,將發行者原則組件新增至全域組件快取中。

若要將發行者原則組件新增至全域組件快取

在命令提示字元鍵入下列命令:

gacutil /i publisherPolicyAssemblyFile

下列命令會將 policy.1.0.myAssembly.dll 新增至全域組件快取。

gacutil /i policy.1.0.myAssembly.dll

重要

除非引數中指定的 /link 原始發行者原則檔案位於與組件相同的目錄中,否則無法將發行者原則組件新增至全域組件快取。

另請參閱