原先已經用 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 組態編輯器所產生的組態檔區段,裡面所指定的組件版本號碼也會是舊的:
得手動改成正確的版本,也就是 5.0.505.0。
改好之後,再啟動原先安裝好的 Enterprise Library 組態編輯器來嘗試編輯應用程式組態,結果會出現錯誤:
也就是說,組態檔編輯器也得一併更新才行。作法是到 Visual Studio 主選單 \ Tools \ Extension Manager,在右上角搜尋文字框中輸入 "enterprise" 即可找到 EnterpriseLibrary.Config。
小結
還是統一用 NuGet 來安裝 Enterprise Library、Unity、以及組態編輯器比較省事。
找不到 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、以及組態編輯器比較省事。
請問版主,已經有了 Entity Framework與 Enterprise Library 有何差別?兩者又該在甚麼情境下使用?或是搭配使用?
回覆刪除兩個是不同的東西。EntLib 裡面提供了許多開發企業級應用程式常需要用到的工具類別,像是 logging、validation、data access 等等。EF 是 ORM 框架,處理資料用的。簡單地說,如果用了 EF,就不太需要 EntLib 裡面的 data access 工具類別了。
回覆刪除