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应该忽略该文件。

猜你喜欢

转载自www.cnblogs.com/fengshi1988/p/9491665.html
ABP