.NET 4.7.2控制台引用.NET Standard 2.0库为何寻找旧版JSON库?
.NET 4.7.2项目引用.NET Standard类库时System.Text.Json版本冲突问题
问题根源
- 依赖链版本不匹配:你使用的
Microsoft.IdentityModel.Protocols.OpenIdConnect在.NET Framework环境下,默认依赖适配.NET Standard 2.0的System.Text.Json兼容包版本(4.0.1.2),但你的类库引用的是6.0.0版本,导致运行时程序集解析器找不到匹配版本。 - 程序集绑定重定向未生效:.NET Framework项目需要通过绑定重定向告知运行时用新版本程序集替换旧版本引用,你的部署环境可能缺少该配置或配置有误。
- 部署依赖不完整:虚拟机部署目录虽有6.0版本的
System.Text.Json.dll,但配套的依赖配置文件(如app.config中的绑定重定向规则)未一同部署,或NuGet打包时未正确生成绑定重定向。
解决方法
1. 手动添加程序集绑定重定向到app.config
在.NET 4.7.2控制台项目的app.config中加入以下配置,强制运行时使用6.0版本的System.Text.Json:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
若你的System.Text.Json为其他版本,修改newVersion为对应版本号即可。
2. 开启NuGet自动生成绑定重定向
右键.NET 4.7.2项目 → 属性 → 生成 → 勾选「自动生成绑定重定向」。NuGet会在构建时自动处理依赖版本冲突,生成正确的绑定重定向配置。
3. 检查依赖包兼容性
确认Microsoft.IdentityModel.Protocols.OpenIdConnect版本是否兼容.NET Framework 4.7.2和高版本System.Text.Json,尝试将该包更新至最新兼容版本,降低冲突概率。
4. 验证部署文件完整性
确保虚拟机部署目录中,除System.Text.Json.dll外,还包含正确的app.config(或与程序集同名的.config文件,如YourApp.exe.config),且配置中的绑定重定向规则正确。
内容的提问来源于stack exchange,提问作者Benj
相关产品推荐
相关产品推荐

