使用服务引用时加载System.ServiceModel版本错误的问题排查
解决netstandard2.0项目中System.ServiceModel.Http版本不匹配问题
遇到的问题是项目安装了4.4.4版本的System.ServiceModel.Http,但运行时系统尝试加载不存在的4.1.2.3版本,以下是可行的解决办法:
方法1:添加程序集绑定重定向
在项目的app.config(或Web项目的web.config)中添加程序集绑定重定向配置,让CLR自动将对4.1.2.3版本的请求重定向到已安装的4.4.4版本:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.ServiceModel.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.4.4.0" newVersion="4.4.4.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
注意:如果是netstandard2.0类库项目,需要确保引用该类库的宿主项目(如控制台、Web项目)的配置文件中包含上述重定向配置——类库本身的配置不会生效,依赖宿主程序的配置。
方法2:检查并更新WCF服务引用生成的代码
添加WCF服务引用时,工具可能自动生成包含特定版本依赖的代码。打开服务引用的Reference.cs文件,搜索System.ServiceModel.Http相关引用,若发现硬编码了4.1.2.3版本的程序集引用,直接修改为当前安装的4.4.4版本即可。
方法3:清理项目并重新还原NuGet包
- 删除项目目录下的
bin和obj文件夹 - 在Visual Studio中依次点击
工具→NuGet包管理器→包管理器设置→清除所有NuGet缓存 - 右键项目选择
还原NuGet包 - 重新生成整个解决方案
方法4:手动指定兼容的包版本
如果上述方法无效,可尝试卸载当前4.4.4版本,安装与4.1.2.3兼容的更高版本(如4.5.x系列,需确认支持netstandard2.0)。通过NuGet包管理器控制台执行:
Uninstall-Package System.ServiceModel.Http -ProjectName YourProjectName Install-Package System.ServiceModel.Http -Version 4.5.3 -ProjectName YourProjectName
安装完成后仍需添加方法1中的程序集绑定重定向配置。
内容的提问来源于stack exchange,提问作者mica
相关产品推荐
相关产品推荐

