首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

ASP.NET 專案「Could not load file or assembly EntityFramework 4.1」解決實錄

     編輯:關於.NET

專案已升級至 Entity Framework 5.0,執行卻拋出找不到 EF 4.1 組件的 `FileLoadException`。本文記錄排查過程、根因分析與徹底解決方案。

錯誤訊息

Could not load file or assembly 'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 
or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. 
(Exception from HRESULT: 0x80131040)

排查步驟

  1. 檢查專案參考:所有專案均參考 EF 5.0 (`EntityFramework.dll` 版本 5.0.0.0)
  2. 搜尋方案資料夾:無任何 `EntityFramework 4.1` 殘留檔案
  3. 檢查 `packages.config`:僅列出 `EntityFramework 5.0`
  4. 檢查 `Web.config`:無 `assemblyBinding` 重導向至 4.1
  5. 啟用 Fusion Log (組件繫結記錄):
    reg add HKLM\Software\Microsoft\Fusion /v EnableLog /t REG_DWORD /d 1
       // 重現錯誤後,查看 %TEMP%\FusionLogs\ 或自訂路徑
       reg delete HKLM\Software\Microsoft\Fusion /v EnableLog

根因發現

Fusion Log 顯示:呼叫組件為 **第三方套件 `Some.ThirdParty.Library`**,該套件編譯時參考 **EF 4.1**,且未提供 `assemblyBinding` 重導向。

.NET 執行階段載入順序:

  1. 應用程式設定檔 (`web.config`) `assemblyBinding`
  2. 發行者原則 (GAC)
  3. 組件本身的參考版本 (Metadata)

因第三方組件內部強制要求 4.1,且無重導向,執行階段嘗試載入 4.1 失敗。

解決方案

方案一:加入組件重導向 (推薦,不需重編第三方)

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

將所有 0.0.0.0 ~ 5.0.0.0 版本導向 5.0.0.0,滿足第三方組件需求。

方案二:安裝 EF 4.1 至 GAC (不推薦)

gacutil /i EntityFramework.dll (v4.1版本)

污染全域組件快取,版本衝突風險高。

方案三:取得第三方原始碼重編 (最徹底)

若有原始碼,更新參考至 EF 5.0+ 重新編譯,消除相依鏈。

驗證修正

  1. 加入 `bindingRedirect` 後重新建置部署
  2. 瀏覽網站,錯誤消失,功能正常
  3. Fusion Log 確認載入版本為 5.0.0.0

最佳實踐總結

  • 專案統一 NuGet 管理套件版本,避免手動複製 DLL
  • 第三方商業元件採購前確認 .NET/EF 版本相容性
  • 例外發生時,**啟用 Fusion Log** 是定位組件載入失敗的金鑰
  • `assemblyBinding` 重導向是解決菱形相依、版本衝突的標準手段

「找不到組件」不一定是專案缺參考,常是**傳遞相依鏈**中某環節版本卡住。善用 Fusion Log 看清完整載入鏈路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved