[C#] 使用Enterprise Library的Interception時,所需要的dll檔案
在Enterprise Library中提供了一種Aop的框架,
在較舊的版本中是稱為Policy Injection Application Block (PIAB),
而在新的版本中,已經整合在Unity Application Block之中。
最近在嘗試將Enterprise Library導入開發中的專案,
使用在Class上加上LogCallHandler的方式,
來替程式加入詳細的Log。
平常開發環境所使用的電腦都是有安裝Enterprise Library,
所以在Coding和Build的時候都沒有什麼問題,
但如果在沒有安裝Enterprise Library的電腦上去進行Build的時候,
雖然可以順利通過,但執行程式時卻會產生Exception如下
Resolution of the dependency failed,
type = "*****************", name = "".
Exception message is: The current build operation (build key Build Key[**************, null]) failed:
'Microsoft.Practices.EnterpriseLibrary.PolicyInjection.CallHandlers.LogCallHandler' 的型別初始設定式發生例外狀況。
(Strategy type ExtendedInstanceInterceptionStrategy, index 0)
檢查了該加的Reference都有加入,Build也順利的通過,
但程式卻不能執行,推測應該是在進行Reflection的時候缺少了檔案,
最後在比較有安裝和沒安裝電腦所Build出來的檔案發現,
在使用Aop框架的時候,也須同時將創建CallHandler需要的dll Copy過去,
程式才能順利執行,程式執行根目錄下須存在的dll如下
- Microsoft.Practices.EnterpriseLibrary.Common.dll
- Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll
- Microsoft.Practices.EnterpriseLibrary.Logging.dll
- Microsoft.Practices.EnterpriseLibrary.PolicyInjection.CallHandlers.dll
- Microsoft.Practices.EnterpriseLibrary.Security.dll
- Microsoft.Practices.EnterpriseLibrary.Validation.dll
- Microsoft.Practices.ObjectBuilder2.dll
- Microsoft.Practices.Unity.Configuration.dll
- Microsoft.Practices.Unity.dll
- Microsoft.Practices.Unity.Interception.dll
若有需要在沒安裝Enterprise Library的電腦上Build程式時,
需檢查是否有遺漏所需的dll檔案,
否則可能會造成Unity Application Block在創建實體時,
發生不可預期的錯誤。
※若有安裝Enterprise Library,這些檔案會自動被Copy到程式執行的根目錄下