SignalR .NET Client用MessagePack报错:IHubConnectionBuilder无AddMessagePackProtocol方法
解决Blazor Server中SignalR Client使用MessagePack协议的CS1061错误
嘿,我来帮你搞定这个编译错误!你遇到的CS1061问题主要是两个原因:缺少扩展方法的命名空间引用,还有NuGet包版本不匹配,下面一步步来修复:
1. 补上缺失的命名空间引用
AddMessagePackProtocol是个扩展方法,它藏在Microsoft.AspNetCore.SignalR.Protocols.MessagePack这个命名空间里,你现在的Blazor页面没引用这个空间,所以编译器找不到它。
直接在页面顶部的@using列表里加上这行:
@using Microsoft.AspNetCore.SignalR.Protocols.MessagePack;
比如放在@using Microsoft.AspNetCore.SignalR.Client;后面就可以了。
2. 统一SignalR相关NuGet包的版本
看你的NuGet配置,Microsoft.AspNetCore.SignalR用的是1.1.0,但SignalR Client和MessagePack协议包是3.1.7,版本差得太多,这肯定会出兼容性问题。
把Microsoft.AspNetCore.SignalR的版本改成和其他包一致的3.1.7:
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="3.1.7" />
另外,把你注释掉的MessagePack基础包也装上吧,MessagePack协议依赖它,版本用1.9.3没问题:
<PackageReference Include="MessagePack" Version="1.9.3" />
3. 验证修改后的代码
修改完@using之后,你的页面顶部应该是这样的:
@page "/" @using System.Threading; @using System.Collections.Generic; @using Microsoft.AspNetCore.SignalR.Client; @using Microsoft.AspNetCore.SignalR.Protocols.MessagePack; <!-- 新增的引用 --> @using WebApp.Data; @inject NavigationManager NavigationManager
现在重新编译项目,AddMessagePackProtocol()方法应该就能被正常识别了。
额外提醒
- 确保你的Blazor Server项目目标框架是
.NET Core 3.1,和NuGet包版本对应; - 如果还是有问题,试试删除项目的
bin和obj文件夹,然后重新还原NuGet包; - 别忘了服务端的SignalR Hub也要配置支持MessagePack,在Startup的
ConfigureServices里加这行:
services.AddSignalR().AddMessagePackProtocol();
内容的提问来源于stack exchange,提问作者anon_dcs3spp
相关产品推荐
相关产品推荐

