【问题标题】:.Net Core SignalR cannot add or use in startup.Net Core SignalR 无法在启动时添加或使用
【发布时间】:2019-12-26 16:24:17
【问题描述】:

我最近回到了使用 SignalR 的旧 .Net Core 应用程序。

我认为当时唯一可用于 .Net Core 应用程序的 SignalR NuGet 包是预览版。它奏效了。

我现在在一台新机器上,不知道这个包的预览提要是什么,所以我卸载了它并安装了这个:

> Install-Package Microsoft.AspNet.SignalR.Core -Version 2.4.1

除了 Startup.cs 文件中的这两个错误之外,只有一些命名空间更改似乎一切正常。

错误 CS1061 'IServiceCollection' 不包含 'AddSignalR' 并且没有可访问的扩展方法 'AddSignalR' 接受 可以找到“IServiceCollection”类型的第一个参数(你是 缺少 using 指令或程序集引用?)

错误 CS1061 'IApplicationBuilder' 不包含 'UseSignalR' 并且没有可访问的扩展方法 'UseSignalR' 接受 可以找到“IApplicationBuilder”类型的第一个参数(你是 缺少 using 指令或程序集引用?)

我环顾四周,除了有人建议您需要安装我找不到的 Microsoft.AspNetCore.SignalR.Http 外,没有太多可用的东西。其他人建议你需要安装这个:

Install-Package Microsoft.AspNetCore.SignalR.Client -Version 1.1.0

我试过了,但错误仍然存​​在,我该如何让这些消失?

【问题讨论】:

  • Microsoft.AspNetCore.SignalR 自 2.1 起成为 ASP.NET Core 的一部分。您的目标是哪个版本?
  • 该项目的目标是 2.0,但我现在已将其更改为 2.2
  • AddSignalR 扩展方法驻留在 Microsoft.Extensions.DependencyInjection 命名空间中。你在使用这个命名空间吗?

标签: c# .net-core signalr


【解决方案1】:

我通过替换代码解决了这个问题

app.UseSignalR(routes =>
        {
            routes.MapHub<NotifyHub>("notify"); 
        });

app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<NotifyHub>("/notify");
        });

我正在使用 Dot net 5.0

【讨论】:

  • 谢谢你!这对我也有用!
  • 谢谢。是的。如果您使用的是 .net 5,这是一个可行的解决方案
【解决方案2】:

正如@Farman 已经指出的,解决方案是使用.UseEndpoints()。正如 MSFT 所记录的,这是替换 .UseSignalR() 的推荐方法,

推荐的方法:

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<SomeHub>("/path");
});

.UseSignalR() 从 .NET Core 3.0 版开始已过时,建议从 .NET Core 3.1 版开始移至 .UseEndpoints()

更多信息可以找到AspNet Core Compatability

【讨论】:

    【解决方案3】:

    Microsoft.AspNetCore.SignalR 自 2.1 起成为 ASP.NET Core 的一部分。

    因此,如果您在 Visual Studio 中的 Project->Properties->Target framework 下将目标版本设置为 NET Core 2.1 或更高版本,您应该可以在 ConfigureServices 方法中调用 services.AddSignalR()

    【讨论】:

    • 是的,我应该可以,但我不能。我收到有问题的错误消息。
    • 更改目标版本后是否重建?
    • 是的,已清理、重建、关闭并重新打开。
    • 如果您创建一个从一开始就以 .NET Core 2.1 为目标的新项目会怎样。顶部有using Microsoft.Extensions.DependencyInjection; 吗?
    • @JsonStatham:那么你的升级显然失败了。如果您删除对AddSignalR() 的调用,它会生成吗?
    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多