ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

VS引用不同版本Dll报错

2022-05-09 09:01:58  阅读:207  来源: 互联网

标签:Newtonsoft dll VS 报错 引用 版本 Debug Dll config


一、准备

  1. 新建类库项目,V1DLL,引用旧版本的dll

  2. 新建类库项目,V2DLL,引用新版本的dll

二、使用:新建使用项目

  1. 在使用项目引用V1的dll,然后再Debug中放入版本的Newtonsoft.Json.dll(该项目中没有引用任何版本的Newtonsoft.Json.dll)
    1. 结果:可以正常使用,不会报版本异常错误

  2. 在使用项目引用V1的dll,然后再Debug中放入版本的Newtonsoft.Json.dll(该项目中没有引用任何版本的Newtonsoft.Json.dll),有时可能在 使用项目中需要用到新的dll
    1. 结果:会报错,提示找不到旧版本的dll

    2. 原因是V1 的dll调用的是旧版本的dll,而放在Debug里的是新版本。

       

解决办法一:

  1. 通过修改App.config文件对Newtonsoft.Json.dll重新定向,若遇到版本低于新版本的话,这定向到新版本:

    <runtime>

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<dependentAssembly>

<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />

<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />

</dependentAssembly>

</assemblyBinding>

</runtime>

  1. 注意:
    1. 以上oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0"标识从0版到第13版都用第13版
    2. 此方法新旧的dll需要相同的的publicKeyToken可以通过添加dll到项目中,然后转到定义获取publicKeyToken
  2. 优缺点:这种办法运行程序没有报错,但是要拷贝一个新的版本到运行目录下

解决办法二:引用不用的dll多个版本共存

  1. 在Debug文件夹下放两个版本的dll,然后配置App.config文件,使得不同版本的dll去不同的文件夹下获得调用

<runtime>

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<dependentAssembly>

<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />

<codeBase version="13.0.0.0" href="新\Newtonsoft.Json.dll" />

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />

<codeBase version="4.0.3.0" href="旧\Newtonsoft.Json.dll" />

</dependentAssembly>

</assemblyBinding>

</runtime>

解决办法三:

不修改App.config文件,引用最新的dll

 

三种办法对比:

方法一与方法三是只能把一个新版本的dll放在Debug路径下,方法二可以多个版本共存。

 

三、额外注意

1、方法二与方法三是需要修改App.config,修改这里时,编译后编译器会自动帮我们修改到****.exe.config文件中,所以假如在软件升级时,单单替换Degug里的exe是不行的。需要把****.exe.config也要做相应的修改/替换。

2、引用dll到项目时,版本信息会记录在项目中,假如临时替换掉Debug下的dll,这里的版本信息不回更新。有时也会造成版本报错。所以建议类库生成时,删除引用的dll重新添加引用。

标签:Newtonsoft,dll,VS,报错,引用,版本,Debug,Dll,config
来源: https://www.cnblogs.com/ihh2021/p/16247886.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有