未能加载文件或程序集或它的某一个依赖项,系统找不到指定的文件
解決不同版本依赖问题
1. 问题描述
一个项目引用不同版本的同一DLL,会引发以下报错:
未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件
这里来解决项目中同一DLL的多版本问题。
2. 解决方式
通过配置配置文件(app.config[控制台或窗体应用等]或web.config[Web项目])增加配置节点dependentAssembly
不同场景有不同的解决方式,下面说明
场景一、以高版本兼容
例如:新旧项目都引用Newtonsoft.Json,但是不同版本。需要以最高版本兼容时:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
</appSettings>
<system.web>
</system.web>
<system.webServer>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
场景二、同一DLL两种版本共存
例如:项目自己引用log4net.dll 版本1.2.13.0 。添加第三方某个dll,第三方依赖log4net.dll版本1.2.9.0,项目中需要两种版本共存。
这里还分两种情况,DLL的publicKeyToken相同还是不同 (publicKeyToken查询见说明)
- publicKeyToken相同,配置方法:
<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不同,配置方法:
<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>
说明
- publicKeyToken获取方式:
使用Visual Studio的Tools Command Prompt命令行工具,输入:SN -T "path",例如:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC>SN -T D:\Newtonsoft.Json.dll
Microsoft(R) .NET Framework 强名称实用工具 版本 4.0.30319.33440
版权所有(C) Microsoft Corporation。保留所有权利。
公钥标记为 30ad4fe6b2a6aeed
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)