部署至虛擬主機時,出現:
Required permissions cannot be acquired.
System.Security.Policy.PolicyException: Required permissions cannot be acquired.
[FileLoadException: Could not load file or assembly 'Microsoft.Practices.ObjectBuilder...'
Failed to grant minimum permission requests. (HRESULT: 0x80131417)]
虛擬主機為安全考量,將 ASP.NET 應用程式運行在**部分信任**環境。觀察發現:
修改 `web.config`:
<system.web>
<trust level="Full" />
</system.web>
但多數共享主機禁止 Full Trust。
對問題 DLL 簽署強名稱,請主機商安裝至全域組件快取 (GAC),GAC 中組件自動獲得 Full Trust。
例如將 `Microsoft.Practices.ObjectBuilder` 替換為輕量級 DI 容器(如 Autofac、SimpleInjector)或手動工廠模式。
// 在 Global.asax Application_Start 列出當前信任等級
string trustLevel = System.Web.Hosting.HostingEnvironment.IsHosted ? "Hosted" : "Not Hosted";
// 或嘗試存取受限資源捕獲 SecurityException 確認
虛擬主機權限問題本質是「部分信任」限制。最務實做法:審視第三方元件相依性、移除或替換需高權限的庫、程式碼層面避開受限 API。若業務需求必須 Full Trust,建議升級至 VPS/雲端主機自行掌控環境。