[EnterpriseLibrary]當出現錯誤訊息無法載入檔案或組件

[EnterpriseLibrary]當出現錯誤訊息無法載入檔案或組件

[EnterpriseLibrary]當出現錯誤訊息無法載入檔案或組件 'Microsoft.Practices.ObjectBuilder, Version=1.0.51205.0, Culture=neutral, PublicKeyToken=null' 或其相依性的其中之一。 無法授與最低使用權限要求。 (發生例外狀況於 HRESULT: 0x80131417)

Dotjm一直都有在使用 Enterprise Library 平常都是一個WEB專案,然後就在App_Code裡直接分層做處理,
剛好這次要做的東西需要透過方案下先加入一個 Class Library 專案 再加入 WEB 專案 ,然後WEB專案再參考Class Library 專案
的.DLL ,都開好專案後,再將要引用的 Enterprise Library  下的 Microsoft.Practices.EnterpriseLibrary.Common.dll
Microsoft.Practices.EnterpriseLibrary.Data.dll 要引用進入 Class Library 內,編譯網站時就會出現
無法載入檔案或組件 'Microsoft.Practices.ObjectBuilder, Version=1.0.51205.0, Culture=neutral, PublicKeyToken=null' 或其相依性的其中之一。
無法授與最低使用權限要求。 (發生例外狀況於 HRESULT: 0x80131417)       
或 Could not load file or assembly Microsoft.Practices.ObjectBuilder

Dotjum參考了幾個國外的討論,
http://www.thescripts.com/forum/thread621454.html
http://www.fbwiki.com/index.php?title=PartialTrustIssue

大概的解釋,就是ASP.NEt引用外部的.DLL要降低信任等級,所以很簡單直接在 web.config 下加入

<trust level="Medium"/>

這邊Dotjum測試過 Higt 是無法讀取的,至於個個等級的權限,大家可以去查閱MSDN透過關鍵字 trust 項目。
這邊轉貼MSDN上,寫的各等級的限制。
--- 以下是引用MSDN對trust的說明
這個屬性可以是使用者定義的值 (如果在 securityPolicy 項目 (ASP.NET 設定結構描述) 項目的 trustLevel 項目中定義了相符的安全性原則對應),或是下列其中一個可能的值 (以嚴格程度排列,愈往下愈嚴格)。
值 說明
Full
指定無限制的使用權限。授與 ASP.NET 應用程式使用權限,以存取符合作業系統安全性的任何資源。支援所有特殊權限操作。這個設定在 AspNetHostingPermissionLevel 列舉型別中稱為 Unrestricted
High
指定高等層級的程式碼存取安全性,這表示應用程式不能進行下列任一作業:

  • 呼叫 Unmanaged 程式碼。

  • 呼叫 Serviced 元件。

  • 寫入事件記錄檔。

  • 存取 Microsoft Message Queing 佇列。

  • 存取 ODBC、OleDb 或 Oracle 資料來源。

Medium

指定中等層級的程式碼存取安全性,這表示除了 High 的限制以外,ASP.NET 應用程式不能進行下列任一作業:

  • 存取應用程式目錄之外的檔案。

  • 存取登錄。

Low

指定低層級的程式碼存取安全性,這表示除了 Medium 的限制以外,應用程式不能進行下列任一作業:

  • 寫入檔案系統。

  • 不能呼叫 Assert 方法以擴展資源的使用權限。

Minimal

指定最低層級的程式碼存取安全性,這表示應用程式只具有執行的權限。
Full (無限制)。
所以再ASP.NET引用外部DLL時要注意權限的設定,有趣嗎?下次在介紹有趣的給你知道。