.NET(C#):關於部屬程式集時的重新導向版本

來源:互聯網
上載者:User

 

目錄

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

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.