Enterprise Library 組件版本錯亂

原先已經用 Enterprise Library 5.0 安裝程式把整套元件安裝好了,後來在為專案加入 EntLib 組件參考時,有些是用挑選組件的方式來加入參考,有些則是用 NuGet。結果用 NuGet 取得的部分組件版本比原先安裝的 EntLib 版本還要新,便產生了一些問題。

找不到 Microsoft.Practices.Unity.Interception 組件

原本沒有發現異狀,程式都可以編譯,但執行時卻出現錯誤:

Could not load file or assembly Microsoft.Practices.Unity.Interception

此錯誤是在程式中存取 EnterpriseLibraryContainer.Current 屬性的時候所引發。

從 Solution Explorer 中查看一下專案的組件參考清單,的確沒有這個組件。於是手動加入 Microsoft.Practices.Unity.Interception 組件參考。程式執行時還是出錯,因為組件版本不符--透過 NuGet 取得的 EntLib 組件版本號碼是 5.0.505.0,Unity 則是 2.1.505.0,此為正確的搭配組合;若以手動方式加入 Unity.Interception.dll 組件參考,其版本號碼卻是 2.1.414.0,這會造成執行時期錯誤(因為它們都是強式名稱組件,故其參考之組件版本號碼必須完全一致)。

應用程式組態檔中的組件版本號碼錯誤

原先使用舊版 Enterprise Library 組態編輯器所產生的組態檔區段,裡面所指定的組件版本號碼也會是舊的:

  <configSections>
    <section name="dataConfiguration"
        type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,
            Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, 
            Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  </configSections>

得手動改成正確的版本,也就是 5.0.505.0。

改好之後,再啟動原先安裝好的 Enterprise Library 組態編輯器來嘗試編輯應用程式組態,結果會出現錯誤:


也就是說,組態檔編輯器也得一併更新才行。作法是到 Visual Studio 主選單 \ Tools \ Extension Manager,在右上角搜尋文字框中輸入 "enterprise" 即可找到 EnterpriseLibrary.Config。



小結

還是統一用 NuGet 來安裝 Enterprise Library、Unity、以及組態編輯器比較省事。

Post Comments

技術提供:Blogger.