專案已升級至 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)
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 執行階段載入順序:
因第三方組件內部強制要求 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,滿足第三方組件需求。
gacutil /i EntityFramework.dll (v4.1版本)
污染全域組件快取,版本衝突風險高。
若有原始碼,更新參考至 EF 5.0+ 重新編譯,消除相依鏈。
「找不到組件」不一定是專案缺參考,常是**傳遞相依鏈**中某環節版本卡住。善用 Fusion Log 看清完整載入鏈路。