ABP 數據遷移初始化的坑

問題1描述

  • ABP官方網站下載標準模版後,進行EF的數據遷移
  • 一直報錯「Castle.Core 4.0.0.0」版本未能加載具體狀況下下圖 執行數據遷移時的錯誤

嘗試方法

<dependentAssembly> <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/> </dependentAssembly> 
  • 簡單粗暴的作法,去掉Castle.Core的引用 執行遷移命令【解決】 執行成功
    • 緣由分析
      • EntityFramework層中並未直接使用Castle.Core,去掉後從新生成不報錯

學習到的經驗

  • CLR加載DLL的策略
  • 配置文件管理與程序集的引用版本重定向
  • assemblyBinding節點下的配置說明
    • 配置代碼
    <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="AuxFiles;bin\subdir"/> <dependentAssembly> <assemblyIdentity name="JeffTypes" publicKeyToken="32ab4ba45e0a69a1" culture="neutral"/> <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/> <codeBase version="2.0.0.0" href="http://www.wintellect.com/JeffTypes.dll"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="TypeLib" publicKeyToken="1f2e74e897abbcfe" culture="neutral"/> <bindingRedirect oldVersion="3.0.0.0-3.5.0.0" newVersion="4.0.0.0"/> <publisherPolicy apply="no"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration> 
    • 第一個dependentAssembly,assemlyIdentity和bindingRedirect元素查找由控制着公鑰標記32ab4ba45e0a69a1的那個組織發佈的、語言文化中性的JeffTypes程序集的1.0.0.0版本時,改成定位同一個程序集的2.0.0.0版本。
    • codeBase元素  查找由控制着公鑰標記32ab4ba45e0a69a1的組織發佈的、語言文化爲中性的JeffTypes程序集的2.0.0.0版本時,嘗試在如下URL處發現它:http://www.Wintellect.com/JeffTypes.dll。雖然第2章沒有特別指出,但codeBase元素也能用於弱命名程序集。在這種狀況下,程序集的版本號會被忽略,並且根本就不該該在XML codeBase元素中寫這個版本號。此外,codeBase所定義的URL必須引用應用程序基目錄下的一個子目錄。
    • 第2個dependentAssembly,assemblyIdentity和bindingRedirect元素  查找由控制着公鑰標記1f2e74e897abbcfe的那個組織發佈的、語言文化中性的TypeLib程序集的3.0.0.0到3.5.0.0版本時(包括3.0.0.0和3.5.0.0在內),改成定位同一個程序集的4.0.0.0版本。
    • publisherPolicy元素  若是生成TypeLib程序集的組織部署了一個發佈者策略文件,CLR應該忽略該文件。
相關文章
相關標籤/搜索