[英].Net Core SignalR cannot add or use in startup
我最近回到了一個使用 SignalR 的舊 .Net Core 應用程序。
我認為當時唯一可用於 .Net Core 應用程序的 SignalR NuGet 包是預覽版。 它奏效了。
我現在在一台新機器上,不知道這個包的預覽提要是什么,所以我卸載了它並安裝了這個:
> Install-Package Microsoft.AspNet.SignalR.Core -Version 2.4.1
除了 Startup.cs 文件中的這兩個錯誤之外,通過一些命名空間更改,一切似乎都很好。
錯誤 CS1061“IServiceCollection”不包含“AddSignalR”的定義,並且找不到接受“IServiceCollection”類型的第一個參數的可訪問擴展方法“AddSignalR”(您是否缺少 using 指令或程序集引用?)
錯誤 CS1061“IApplicationBuilder”不包含“UseSignalR”的定義,並且找不到接受“IApplicationBuilder”類型的第一個參數的可訪問擴展方法“UseSignalR”(您是否缺少 using 指令或程序集引用?)
我環顧四周,除了有人建議您需要安裝我找不到的Microsoft.AspNetCore.SignalR.Http
之外,沒有太多可用的東西。 其他人建議您需要安裝此:
Install-Package Microsoft.AspNetCore.SignalR.Client -Version 1.1.0
我試過了,但錯誤仍然存在,我該如何讓這些消失?
我通過替換代碼解決了這個問題
app.UseSignalR(routes =>
{
routes.MapHub<NotifyHub>("notify");
});
至
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<NotifyHub>("/notify");
});
我正在使用點網 5.0
正如@Farman 已經指出的那樣,解決方案是使用.UseEndpoints()
。 正如 MSFT 所記錄的,這是通過替換.UseSignalR()
的推薦方法,
推薦的方法:
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<SomeHub>("/path");
});
.UseSignalR()
從 .NET Core 3.0 版開始已過時,建議從 .NET Core 3.1 版開始移至.UseEndpoints()
。
可以找到更多信息AspNet Core 兼容性
Microsoft.AspNetCore.SignalR
自 2.1 起成為 ASP.NET Core 的一部分。
因此,如果您在 Visual Studio 的 Project->Properties->Target framework 下將目標版本設置為 NET Core 2.1 或更高版本,您應該可以在ConfigureServices
方法中調用services.AddSignalR()
。
點網5.0
先添加包:
dotnet add package Microsoft.AspNet.SignalR.Core --version 2.4.1
在,public void ConfigureServices(IServiceCollection services)
services.AddSignalR();
在,public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<NotifyHub>("/notify");
});
我在項目依賴項中發現了對舊 Mvc nuget 的引用,即使每個項目都有 .net6.0 配置(由錯誤的 .net 更新引起),它也會導致其余項目加載舊的 .net 核心包。 能夠在不添加任何包( signalR 包含在 netcore 中)的情況下添加Microsoft.AspNet.SignalR.Core引用的解決方案是刪除 Mvc nuget 引用並在 csproj 中包含下一個引用。
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.