.NET6 x86控制台程序报BuildServiceProvider方法找不到异常咨询
缺失方法报错触发原因
这个报错和你有没有手动编写依赖注入代码无关,本质是NuGet包版本冲突导致的程序集加载不匹配:
- 你项目中错误引用了不属于.NET 6生态的旧版本包
Microsoft.AspNetCore.SignalR.Core (1.1.0),这个包是.NET Core 2.x/3.x时代的版本,它依赖2.x版本线的Microsoft.Extensions.DependencyInjection相关程序集。 - 你的项目目标框架是.NET 6,同时引用的
Microsoft.AspNetCore.SignalR.Client (6.0.5)、Microsoft.AspNetCore.SignalR.Common (6.0.5)都依赖6.0版本线的Microsoft.Extensions.DependencyInjection,两个版本线的同名程序集里ServiceCollectionContainerBuilderExtensions.BuildServiceProvider方法签名存在差异。 - 运行时程序集加载逻辑命中了低版本的依赖注入程序集时,就找不到.NET 6配套的对应方法签名,抛出你看到的西班牙文报错,直译就是找不到方法: 'Microsoft.Extensions.DependencyInjection.ServiceProvider Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(Microsoft.Extensions.DependencyInjection.IServiceCollection)'。
额外说明:在.NET 6项目里使用SignalR客户端,不需要单独手动引用Microsoft.AspNetCore.SignalR.Core包,Microsoft.AspNetCore.SignalR.Client 6.0.5已经内置了适配.NET 6版本的SignalR核心依赖,你手动引入的1.1.0版本包是完全多余的冲突源。
修复步骤
- 移除项目中对
Microsoft.AspNetCore.SignalR.Core (1.1.0)的NuGet包引用 - 清理项目根目录下的
bin、obj文件夹 - 重新生成项目即可解决问题
内容的提问来源于stack exchange,提问作者Jesus Hedo
相关产品推荐
相关产品推荐

