升级VS后Boilerplate项目出现IServiceProviderIsService未注册错误
错误详情
'Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider_26c5b40a-354d-4734-90cd-1b6d59e8e3d1' 等待以下依赖项:服务'Microsoft.Extensions.DependencyInjection.IServiceProviderIsService'未注册。
问题根源
升级Visual Studio后,项目依赖的.NET SDK或NuGet包可能被自动更新到.NET 8版本,但Boilerplate 8.1.0并不兼容.NET 8,导致依赖注入容器中缺少必要的服务注册。
解决步骤
1. 锁定目标框架版本
打开项目的*.csproj文件,确认目标框架未被改为.NET 8,Boilerplate 8.1.0仅支持.NET 6或.NET 7:
<TargetFramework>net6.0</TargetFramework> <!-- 或者保留net7.0,不要修改为net8.0 -->
2. 修正NuGet包版本
检查项目中所有Microsoft.AspNetCore相关包的版本,确保它们与Boilerplate 8.1.0的依赖版本匹配,避免自动升级到.NET 8系列的包。比如Microsoft.AspNetCore.Mvc.ApiExplorer需使用对应.NET 6/7的版本,而非8.x版本。
3. 手动注册缺失服务
在Startup.cs(或使用顶级语句的Program.cs)的服务配置代码中,手动添加IServiceProviderIsService的注册:
using Microsoft.Extensions.DependencyInjection; // 在services.AddMvc()或同类配置代码之后添加 services.AddSingleton<IServiceProviderIsService, ServiceProviderIsService>();
4. 清理NuGet缓存并重新还原
打开命令行,先清除NuGet缓存:
dotnet nuget locals all --clear
进入解决方案目录后,执行还原命令:
dotnet restore
5. 升级Boilerplate(可选)
如果确实需要使用.NET 8,可以将Boilerplate升级到支持.NET 8的最新版本,但升级前务必备份代码,因为可能存在API变更需要适配。
内容的提问来源于stack exchange,提问作者Frosty Frisby

