.NET Core 2.2升级至.NET 8.0后MvcJsonOptions类型加载失败问题
解决.NET 8升级后
MvcJsonOptions类型加载失败问题 核心原因
从.NET Core 3.0开始,Microsoft.AspNetCore.Mvc.MvcJsonOptions已被废弃,取而代之的是Microsoft.AspNetCore.Mvc.NewtonsoftJson.NewtonsoftJsonOptions。升级后项目中仍有代码或依赖库在引用旧类型,就会触发TypeLoadException。
分步解决方案
1. 替换代码中所有MvcJsonOptions引用
检查项目中所有使用MvcJsonOptions的地方,比如Startup.cs的配置代码:
- 旧代码(错误):
services.AddMvc() .AddJsonOptions(options => { // 操作options(MvcJsonOptions类型) });
- 替换为NewtonsoftJson的配置:
services.AddControllersWithViews() .AddNewtonsoftJson(options => { // 操作options(NewtonsoftJsonOptions类型) // 示例:设置日期格式 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; });
如果仍在使用AddMvc(),也可以改成AddMvc().AddNewtonsoftJson(...),核心是用AddNewtonsoftJson方法配置Json序列化,而非旧的AddJsonOptions。
2. 清理残留的NuGet依赖和旧程序集
- 卸载所有和旧版Json格式化相关的包,比如
Microsoft.AspNetCore.Mvc.Formatters.Json(这个包在.NET Core 3.0+已合并到框架中,无需单独引用)。 - 打开项目文件(.csproj),删除所有残留的
<PackageReference>中关于旧Json包的条目,确保只保留Microsoft.AspNetCore.Mvc.NewtonsoftJson(版本8.0.2)。 - 手动删除项目的
bin和obj目录,再在Visual Studio中执行「生成」→「清理解决方案」,彻底清理旧编译产物。
3. 处理refs目录的旧程序集问题
refs目录中的程序集是.NET的参考程序集,用于编译时引用。如果这里出现旧版本,说明项目仍有依赖在引用旧框架版本:
- 检查所有NuGet包的依赖项,确保没有包依赖.NET Core 2.2或3.2的Microsoft.AspNetCore相关组件。
- 在.csproj文件中明确指定目标框架并添加框架引用,强制项目仅使用.NET 8的ASP.NET Core组件:
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>
4. 检查第三方库兼容性
如果项目使用了第三方NuGet包,确认这些包是否支持.NET 8。部分旧包内部可能仍在调用MvcJsonOptions,这种情况下需要升级第三方包到最新版本,或替换为兼容的替代库。
验证步骤
- 重新构建解决方案
- 启动项目,观察是否仍有类型加载异常
- 若问题依旧,打开Visual Studio「输出」窗口(切换为「显示来自:生成」),查看构建过程中的警告提示,根据提示进一步排查依赖问题。
内容的提问来源于stack exchange,提问作者Manoj Pruthi
相关产品推荐
相关产品推荐

