未安装Visual Studio环境下System.Text.Json无法加载问题求助
问题根因
你遇到的报错本质是版本不匹配 + 依赖缺失:
- 你的项目目标框架是 netcoreapp3.1,该框架自带的System.Text.Json版本为3.x系列
- 你引用的5.0.0版本 Microsoft.Extensions.Configuration.Json 依赖System.Text.Json 5.0.0.0,你显式安装5.0.2版本后没有配置绑定重定向,程序运行时依旧会尝试加载5.0.0.0版本
- 安装Visual Studio时会自动在全局NuGet包缓存中添加各版本的常用库,此时程序可以从全局缓存找到对应依赖;卸载VS后全局缓存对应文件被清除,就会出现加载失败的报错
解决方案
方案1:添加绑定重定向 + 全量输出依赖
这个方案不需要修改现有包版本,操作如下:
- 在项目根目录新增(或修改已有的)
app.config文件,添加如下绑定重定向规则,将所有System.Text.Json的版本请求指向你实际引用的5.0.2版本:
<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-5.0.2.0" newVersion="5.0.2.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
- 打开你的.csproj文件,在
PropertyGroup节点中添加以下两个配置,让编译时自动生成绑定重定向,并且把所有NuGet依赖的DLL都复制到输出目录:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
- 重新编译项目,部署时将输出目录下的所有文件全部拷贝到目标设备,不要只单独拷贝你自己的业务DLL。
方案2:对齐包版本与目标框架
如果你不想做额外的配置,可以将所有Microsoft.Extensions开头的NuGet包版本降级到3.1.x版本,和你项目的.NET Core 3.1目标框架保持一致,天然不存在版本冲突问题,不需要配置绑定重定向。
内容的提问来源于stack exchange,提问作者Daniel Schmid
相关产品推荐
相关产品推荐

