zoukankan      html  css  js  c++  java
  • 未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件

    问题描述

    一个项目引用不同版本的同一dll,会引发以下报错:

    未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件 

    这里来解决项目中同一dll的多版本问题。

    解决方式

    通过配置web.config配置文件(app.config或web.config)增加配置节点

    不同场景有不同的解决方式,下面说明

    1. 场景一   以高版本兼容

    例如:新旧项目都引用Newtonsoft.Json,但是不同版本。需要以最高版本兼容。 

    [html] view plain copy
     
     
     
    1. <runtime>  
    2.   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
    3.     <dependentAssembly>  
    4.       <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>  
    5.       <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>  
    6.     </dependentAssembly>  
    7.   </assemblyBinding>  
    8. </runtime>  

    2. 场景二   同一dll两种版本共存

    例如:项目自己引用log4net.dll 版本1.2.13.0 。添加第三方某个dll,第三方依赖log4net.dll版本1.2.9.0,项目中需要两种版本共存。
    这里还分两种情况,dll的publicKeyToken相同还是不同 (publicKeyToken查询见说明1)
    publicKeyToken相同,配置方法:
    [html] view plain copy
     
     
     
    1. <runtime>  
    2.   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
    3.     <dependentAssembly>  
    4.       <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />  
    5.       <codeBase version="1.2.13.0" href="binlog4netdll1_2_13log4net.dll" />  
    6.       <codeBase version="1.2.9.0" href="binlog4netdll1_2_9log4net.dll" />  
    7.     </dependentAssembly>  
    8.   </assemblyBinding>  
    9. </runtime>  

    publicKeyToken不同,配置方法:
    [html] view plain copy
     
     
     
    1. <runtime>  
    2.   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
    3.     <dependentAssembly>  
    4.       <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />  
    5.       <codeBase version="1.2.13.0" href="binlog4netdll1_2_13log4net.dll" />  
    6.     </dependentAssembly>  
    7.     <dependentAssembly>  
    8.       <assemblyIdentity name="log4net" publicKeyToken="b32731d11ce58905" />  
    9.       <codeBase version="1.2.9.0" href="binlog4netdll1_2_9log4net.dll" />  
    10.     </dependentAssembly>  
    11.   </assemblyBinding>  
    12. </runtime>  
     

    说明

    1.publicKeyToken获取方式:使用vs的Tools Command Prompt命令行工具,输入:SN -T "path",例如:

    1.  
      C:Program Files (x86)Microsoft Visual Studio 11.0>SN -T "D:projectliberaryExternallog4net.dll"
    2.  
       
    3.  
      Microsoft(R) .NET Framework 强名称实用工具 版本 4.0.30319.17929
    4.  
      版权所有(C) Microsoft Corporation。保留所有权利。
    5.  
       
    6.  
      公钥标记为 b32731d11ce58905
    注意:href的路径要保证正确。
     
  • 相关阅读:
    在Arduino IDE中安装ESP32 Filesystem Uploader
    人工智能必备数学基础:线性代数基础(1)
    人工智能必备数学基础:高等数学基础(3)
    迟到的=2020=年终总结
    常用软件-官方下载地址
    海康、大华的RTSP地址规则说明及通道问题(重点)
    各类服务器性能的瓶颈分析
    分析影响流媒体服务器性能的硬件瓶颈
    linux下程序、动态库、静态库内部添加版本号和编译时间与Windows下Qt 如何给程序添加版本信息
    css link import 两者之间的区别
  • 原文地址:https://www.cnblogs.com/lxf1117/p/13538433.html
Copyright © 2011-2022 走看看