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;binsubdir"/>
      <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应该忽略该文件。
原文地址:https://www.cnblogs.com/fengshi1988/p/9491665.html