目錄
- 1. 單個程式集配置重新導向
- 2. 發行者策略程式集
- 3. 開發測試中頻繁版本更新
返回目錄
1. 單個程式集配置重新導向
當單個依賴程式集,比如A,依賴程式集B,比如使用B的1.0版本。現在B從1.0升級到了2.0。那麼此時可以在程式集A中手動重新導向B的版本,這樣在程式集A運行後會自動使用更新的2.0版本的程式集B。
程式集的版本重新導向須寫在程式集自己的設定檔中(App.config)。在<configuration> – <runtime> – <assemblyBinding> – <dependentAssembly> 元素下。首先必須需要一個<assemblyIdentity>元素來指定依賴的(引用)程式集。包括它的名稱,公開金鑰標記等……。接著就是<bindingRedirect>元素代表重新導向資訊,使用<bindingRedirect>的oldVersion和newVersion屬性來指定新舊版本的資訊。
比如如下設定檔代碼(應用在程式集A的設定檔:a.exe.config中):
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<!-- 依賴程式集標識 -->
<assemblyIdentity name="B"
publicKeyToken="39e0cba45e0a8bc2"/>
<!-- 重新導向資訊 -->
<bindingRedirect oldVersion="1.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
返回目錄
2. 發行者策略程式集
還是上面的執行個體,如果用標題1的方法的話,每一個引用B舊版本的程式集,都需要手動設定自己的把依賴的版本1的B程式集重新導向成版本2的B程式集。顯然不是個好的方法。.NET還提供發行者策略(Publisher Policy)。其實就是把針對某個程式集的配置直接跟隨程式集編譯,然後在部署時,程式集和發行者策略都會儲存在GAC裡,這樣任何引用該程式集的對象都會受到影響,而不用一個一個慢慢配置了。
建立開發人員策略程式集需要使用al.exe的/link參數來制定一個發行者策略檔案。具體可以參考MSDN:http://msdn.microsoft.com/zh-cn/library/dz32563a.aspx
接下來還有一個問題,既然發行者策略程式集建立成功,那麼所有使用它的程式集都會根據發行者策略而受到影響,某些時候程式集不需要受到發行者策略影響。則需要在<assemblyBinding>元素下加入,<publisherPolicy>元素,用apply屬性來控制是否應用發行者策略配置。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<!-- 不應用發行者策略配置 -->
<publisherPolicy apply="no"/>
</assemblyBinding>
</runtime>
</configuration>
返回目錄
3. 開發測試中頻繁版本更新
第三個情景就是在程式集的開發測試中,往往頻繁更新版本,此時則需要設定發行者策略配置並將程式集安裝到GAC內。那麼可以將程式集所在目錄設定到Windows環境變數DEVPATH中。然後在machine.config(注意是machine.config,不是app.config)中開啟開發模式(通過<developmentMode>節點),這樣CLR在尋找程式集時不僅要瀏覽GAC,還是探索DEVPATH中的目錄,程式集就不必總安裝到GAC中了。
在machine.config中加入:
<configuration>
<runtime>
<developmentMode developerInstallation="true"/>
</runtime>
</configuration>