Web Api运行提示找不到System.Net.Http 4.0.0.0程序集如何解决
报错信息:
No se puede cargar el archivo o ensamblado 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
报错含义:无法找到对应版本的System.Net.Http程序集
问题原因
- .NET Framework内置库与NuGet包冲突:若项目目标框架为.NET Framework 4.7.1及以上版本,框架本身已内置System.Net.Http程序集,手动安装的NuGet版4.2.0.0会与内置版本产生冲突,导致绑定重定向规则不生效。
- 引用属性配置错误:项目中System.Net.Http引用的「特定版本」属性设为True,或「复制本地」属性设为False,会导致运行时无法加载到正确版本的程序集。
- 父级配置覆盖:如果Web API部署在IIS子应用下,父级站点web.config中优先级更高的System.Net.Http绑定重定向规则,会覆盖当前项目的配置。
- 项目文件残留旧引用:.csproj项目文件中残留旧版本System.Net.Http的引用节点,与当前添加的4.2版本引用产生冲突。
解决方案
步骤1:调整引用属性
打开Visual Studio解决方案资源管理器,展开项目的「引用」节点,找到System.Net.Http引用,右键点击选择「属性」:
- 将「特定版本」设置为False
- 将「复制本地」设置为True
步骤2:处理版本冲突
根据项目实际场景二选一:
- 若项目目标框架为.NET Framework 4.7.1及以上:直接卸载NuGet安装的System.Net.Http包,使用框架自带版本即可,同时修改web.config绑定重定向规则:
<dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0"/> </dependentAssembly>
- 若确实需要使用4.2.0.0版本:先卸载所有System.Net.Http相关NuGet包,重新安装4.2.0版本,安装完成后确认web.config的重定向规则被正确更新。
步骤3:清理缓存重新生成
- 右键解决方案选择「清理解决方案」
- 关闭Visual Studio,删除项目根目录下的
bin、obj文件夹,以及.vs隐藏文件夹 - 重新打开项目,右键选择「重新生成解决方案」后运行测试
步骤4:排查IIS父级配置冲突
如果是部署在IIS子应用下出现的问题,可在当前项目的绑定重定向规则前添加<remove>节点,移除继承的父级配置:
<dependentAssembly> <remove name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" /> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/> </dependentAssembly>
步骤5:清理项目文件残留引用
右键项目选择「卸载项目」,再右键选择「编辑.csproj文件」,搜索所有System.Net.Http相关的引用节点,仅保留一个正确的4.2版本引用,删除所有旧版本残留节点后重新加载项目生成即可。
内容的提问来源于stack exchange,提问作者jstuardo
相关产品推荐
相关产品推荐

