如何:建立發行者原則
注意
本文專屬於 .NET Framework。 其不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。
組件的廠商可以藉由加入具有升級組件的發行者原則檔,表示應用程式應使用較新版的組件。 發行者原則檔會指定組件重新導向和程式碼基底設定,並使用與應用程式組態檔相同的格式。 發行者原則檔案會編譯成組件,並放在全域組件快取中。
建立發行者原則有三個步驟:
建立發行者原則檔。
建立發行者原則組件。
將發行者原則組件新增至全域組件快取。
發行者原則結構描述的描述位於重新導向組件版本。 下列範例顯示發行者原則檔案,將某個 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
發行者原則組件必須符合其所套用組件的處理器結構。 因此,如果組件具有 MSIL 的 ProcessorArchitecture 值,則必須使用 /platform:anycpu
建立該組件的發行者原則組件。 您必須為每個處理器特定組件提供個別的發行者原則組件。
此規則的結果是若要變更組件的處理器結構,您必須變更版本號碼的主要或次要元件,以便提供具有正確處理器結構的新發行者原則組件。 一旦組件具有不同的處理器結構,舊的發行者原則組件就無法為組件提供服務。
另一個結果是,2.0 版連結器無法用來為使用舊版 .NET Framework 編譯的組件建立發行者原則組件,因為其一律會指定處理器結構。
將發行者原則組件新增至全域組件快取
使用全域組件快取 (Gacutil.exe) 工具,將發行者原則組件新增至全域組件快取中。
若要將發行者原則組件新增至全域組件快取
在命令提示字元鍵入下列命令:
gacutil /i publisherPolicyAssemblyFile
下列命令會將 policy.1.0.myAssembly.dll
新增至全域組件快取。
gacutil /i policy.1.0.myAssembly.dll
重要
除非引數中指定的 /link
原始發行者原則檔案位於與組件相同的目錄中,否則無法將發行者原則組件新增至全域組件快取。