Newtonsoft.Json NuGet v11.0.1-beta3在.NET Standard 2.0 Release模式下异常求助
解决.NET Standard 2.0类库Release模式下Newtonsoft.Json加载失败的问题
我碰到过不少类似的情况——Debug模式下单元测试全过,一切正常,切换到Release模式就突然找不到Newtonsoft.Json的程序集,明明NuGet包已经正确安装,而且目录里也能看到对应的netstandard2.0版本dll。给你几个针对性的解决方案,按顺序试试:
1. 彻底清理缓存并重新还原NuGet包
Release模式的包缓存偶尔会出现异常,试试完全重置:
- 先关闭Visual Studio
- 删除项目根目录下的
obj和bin文件夹(别放过里面的Release子目录) - 找到用户目录下的NuGet缓存文件夹
~/.nuget/packages/newtonsoft.json/11.0.1-beta3,直接删除 - 重新打开VS,右键项目选择还原NuGet包,然后重新生成Release版本
2. 检查Release模式下的“复制本地”设置
有时候Release模式的依赖项复制配置会和Debug不一致:
- 在解决方案资源管理器里,展开项目的依赖项 > NuGet > Newtonsoft.Json
- 右键点击它,选择属性
- 确保复制本地设置为
True(Debug模式下这个肯定是对的,但Release可能被莫名重置) - 也可以直接打开
.csproj文件,确认你的PackageReference没有额外的限制配置,比如不要有PrivateAssets="All"这种会阻止dll复制到输出目录的内容,正常的配置应该是:<ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="11.0.1-beta3" /> </ItemGroup>
3. 添加绑定重定向(如果被.NET Framework项目引用)
如果你的.NET Standard类库是被.NET Framework项目调用的,Release模式下很可能缺少绑定重定向:
- 在类库的
.csproj文件中添加以下配置,强制生成绑定重定向:<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup> - 重新生成项目后,检查输出目录下的
.config文件,确认里面包含Newtonsoft.Json的绑定重定向条目。
4. 暂时关闭Release模式的代码优化
VS2017早期版本的Release代码优化偶尔会导致.NET Standard依赖加载异常:
- 右键项目选择属性 > 生成
- 切换到Release配置,取消勾选优化代码选项
- 重新生成并测试,如果问题消失,说明是优化导致的,建议你升级VS到更高版本(15.5.5确实比较老,后续补丁修复了不少这类问题)
5. 升级Visual Studio到最新补丁版本
你用的VS2017 15.5.5是.NET Standard 2.0刚推出时的版本,后续的15.9.x补丁修复了大量NuGet和.NET Standard相关的兼容性问题。升级到最新可用的VS2017版本,大概率能直接解决这个问题。
另外补充一句:其实Newtonsoft.Json从v11.0.0正式版开始就已经支持.NET Standard 2.0了,你之前觉得正式版不支持可能是个误解,不妨试试安装Newtonsoft.Json v11.0.2正式版,说不定Release模式的问题直接就消失了。
内容的提问来源于stack exchange,提问作者DrGriff
相关产品推荐
相关产品推荐

