取消

c#引用不同版本dll(转载)

因为经常会用到不同项目引用了相同dll的不同版本,所以记录一下,免得每次去百度 原文地址:引用不同版本dll


问题描述

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

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

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

解决方式

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

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

  1. 场景一 以高版本兼容 例如:新旧项目都引用Newtonsoft.Json,但是不同版本。需要以最高版本兼容。
1
2
3
4
5
6
7
8
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
      <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
  1. 场景二 同一dll两种版本共存

例如:项目自己引用log4net.dll 版本1.2.13.0 。添加第三方某个dll,第三方依赖log4net.dll版本1.2.9.0,项目中需要两种版本共存。 这里还分两种情况,dll的publicKeyToken相同还是不同 (publicKeyToken查询见说明1) publicKeyToken相同,配置方法:

1
2
3
4
5
6
7
8
9
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
      <codeBase version="1.2.13.0" href="bin\log4netdll\1_2_13\log4net.dll" />
      <codeBase version="1.2.9.0" href="bin\log4netdll\1_2_9\log4net.dll" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

publicKeyToken不同,配置方法:

1
2
3
4
5
6
7
8
9
10
11
12
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
      <codeBase version="1.2.13.0" href="bin\log4netdll\1_2_13\log4net.dll" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="log4net" publicKeyToken="b32731d11ce58905" />
      <codeBase version="1.2.9.0" href="bin\log4netdll\1_2_9\log4net.dll" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

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

C:\Program Files (x86)\Microsoft Visual Studio 11.0>SN -T "D:\project\liberary\External\log4net.dll"

Microsoft(R) .NET Framework 强名称实用工具 版本 4.0.30319.17929
版权所有(C) Microsoft Corporation。保留所有权利。

公钥标记为 b32731d11ce58905

本文会经常更新,请阅读原文: https://dashenxian.github.io/post/c-%E5%BC%95%E7%94%A8%E4%B8%8D%E5%90%8C%E7%89%88%E6%9C%ACdll ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com)

登录 GitHub 账号进行评论