SignalR 无法与 .Net Core 兼容。

10

我正在尝试在我的C# Asp.Net core项目中使用NuGet包管理器安装SignalR,但我收到了这个错误提示:SignalR与.net core不兼容,它真的还没有支持吗?或者我可以做些什么来让它工作?(如果需要提到,我正在使用VS2017)。错误信息:

Restoring packages for D:\Test\Test.WebAPI\Test.WebAPI.csproj...
Package Microsoft.AspNet.SignalR.Core 2.2.1 is not compatible with netcoreapp1.1 (.NETCoreApp,Version=v1.1). Package Microsoft.AspNet.SignalR.Core 2.2.1 supports: net45 (.NETFramework,Version=v4.5)
Package Owin 1.0.0 is not compatible with netcoreapp1.1 (.NETCoreApp,Version=v1.1). Package Owin 1.0.0 supports: net40 (.NETFramework,Version=v4.0)
Package Microsoft.Owin 2.1.0 is not compatible with netcoreapp1.1 (.NETCoreApp,Version=v1.1). Package Microsoft.Owin 2.1.0 supports:
  - net40 (.NETFramework,Version=v4.0)
  - net45 (.NETFramework,Version=v4.5)
Package Microsoft.Owin.Security 2.1.0 is not compatible with netcoreapp1.1 (.NETCoreApp,Version=v1.1). Package Microsoft.Owin.Security 2.1.0 supports: net45 (.NETFramework,Version=v4.5)
One or more packages are incompatible with .NETCoreApp,Version=v1.1.
Package restore failed. Rolling back package changes for 'Test.WebAPI'.

更新:

ASP.Net Core的SignalR目前(2018年1月1日)以alpha版本在NuGet中提供。

https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR/

更新01.06.2018:

现在可以将SignalR用于ASP.Net Core 2.1。


4
SignalR目前还不是ASP.Net Core的一部分,但它已经纳入了规划路线。 - DavidG
2
你知道源代码是可用的吗?你理论上可以下载它并查看它的状态,甚至开始使用它。当然,我不会相信它用于生产目的。 - mason
@mason 这个链接就是让我感到困惑的原因(我本以为它应该在那里)。好的,我会尝试一下,希望有一天能有一个 NuGet 包使得维护更容易些。 - Mohammed Noureldin
5
截至2017年Microsoft Build大会(约在2017年5月12日左右)的最新消息是:SignalR for .NET Core仍在开发中,目标预览版发布时间为2017年Q3季度,正式版发布时间为2017年Q4季度。Github网址为https://github.com/aspnet/SignalR,Build会议演示可在https://channel9.msdn.com/Events/Build/2017/B8078找到,您也可以在该页面上查看幻灯片。 - Seafish
@Seafish 谢谢你提供的信息!我今天会看一下这个视频,我仍然对它感到非常兴奋。 - Mohammed Noureldin
显示剩余3条评论
7个回答

11

SignalR 2是为.NET Framework构建的,而不是为.NET Core。他们仍在致力于为.NET Core开发SignalR。

ASP.NET Core Roadmap的旧版本将SignalR列为ASP.NET Core 1.2的一部分。 最新版本没有提到SignalR(或框架中的任何内容),但提到1.2计划于2017年第二季度发布。

一个视频,Microsoft的人正在讨论SignalR在ASP.NET Core中的应用。这个视频长达一个小时,所以我不会为您观看它。但也许其中包含一些有用的信息。


你有关于ASP.Net Core的SignalR的任何更新吗?我谷歌了一下,但没有明显的结果。 - Mohammed Noureldin
1
你看过他们的 GitHub 页面吗?https://github.com/aspnet/SignalR/blob/dev/README.md - mason
是的,但我不确定它是否已经正式发布还是仍处于开发阶段。 - Mohammed Noureldin
1
这是一款开源软件,一直在不断地开发中。如果你想知道是否有稳定版本发布,我也不清楚。如果我要尝试找出答案,我可以像你一样在谷歌上搜索。或者我可以在他们的 GitHub 存储库上打开一个问题并询问计划是什么。 - mason
抱歉,我的意思是如果有任何稳定版本的话。我会继续搜索,并在今天稍后尝试它。谢谢。 - Mohammed Noureldin
1
@MohammedNoureldin,现在有Alpha 2版本发布了。我正在使用它,而且它运行良好。 - Jins Peter

4

SignalR适用于asp.net core

编辑: SignalR适用于asp.net core已经发布,配合.net standard 2.1使用。

该软件包针对.net standard 2.0并处于alpha状态。

在.net standard 2.1之前似乎没有稳定版本发布。

enter image description here

软件包可以在myget上找到.

如果您需要负载均衡signalr hub,可以使用redis作为后备引擎。


适用于asp.net的SignalR

同时也有适用于.net框架的SignalR软件包,已经发布了稳定版本。可以在nuget上找到.

对于负载均衡,支持以下后备引擎类型:

  • Azure Service Bus
  • Redis
  • SQL Server

适用于asp.net core的SignalR.Server (更新于18.09.2017:不再提供)

请勿使用此软件包!

这是一个已弃用的软件包,针对.net 4.5.1和.net standard 1.6。没有发布过并且将永远不会发布稳定的版本。

预览软件包可在myget上找到.

如果您对SignalR Hub进行负载平衡,可以使用SQL Server作为后端。 (但是实现存在问题)

4

我目前正在开发一个使用signalr的.net core / angular 4项目。

在谷歌上有一些种子示例,但是要通过Nuget下载Signalr可能会让大多数人遇到问题的一件事情是,它是不同的包存储库 - 你需要更新你的解决方案中的Nuget.config文件以引用更先进的存储库:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetCore" value="https://dotnet.myget.org/F/aspnetcore-ci-dev/api/v3/index.json" />
    <add key="NuGet" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

.NET Core 应该取什么名字? - Saibamen
1
看起来1.0.0(预览3)只能与netstandard 2.0一起使用:正在安装Microsoft.AspNetCore.SignalR 1.0.0-preview3-25758。包Microsoft.AspNetCore.SignalR 1.0.0-preview3-25758与netcoreapp1.1(.NETCoreApp,Version = v1.1)不兼容。包Microsoft.AspNetCore.SignalR 1.0.0-preview3-25758支持:netstandard2.0(.NETStandard,Version = v2.0) - mikebridge
@mikebridge,你最终找到支持1.1的合适版本了吗? - FiringSquadWitness
@FiringSquadWitness 我完全放弃了SignalR,现在使用Microsoft.AspNetCore.WebSockets和Pusher的Websockets。这与我的React前端非常流畅地配合使用。 - mikebridge

2

没错。SignalR是建立在OWIN之上的,如果你使用全框架进行目标设置,则与asp.net core兼容,但不与dotnet core兼容。


1
有什么想法如何做到这一点吗?我似乎找不到任何此设置的示例。 - gschuager

1

我最近将一个使用SignalR的MVC5应用程序迁移到了ASP.NET Core 1.1 (netcoreapp1.1)。我发现一个非官方包(Gray.Microsoft.AspNetCore.SignalR.Server)可以直接使用,几乎没有对我的现有代码做出任何更改。

csproj文件

<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="1.0.2" />
<PackageReference Include="Gray.Microsoft.AspNetCore.SignalR.Server" Version="0.2.0-alpha1" />

启动 - ConfigureServices 方法

services.AddSignalR();

启动 - 配置方法

app.UseWebSockets();
app.UseSignalR();

听起来很实用,稍后我会试一下。你有关于官方SignalR core的任何想法吗?它稳定吗?'netcoreapp1.1'是什么意思?它使用的是SignalR的官方开源版本还是旧版本? - Mohammed Noureldin
1
我迁移的MVC5应用程序使用了官方的SignalR,直到开始迁移时才发现SignalR与.NET Core不兼容。幸运的是,那个Nuget包拯救了我!虽然它不是官方的(你可以从包名看出来),但它很有效。 - undefined
好的,普通的旧版SignalR不兼容.Net Core 1.1,我们仍在等待一个稳定版本的SignalR Core。在那之前,我会尝试使用你提到的那个包,谢谢。 - Mohammed Noureldin

0

欢迎来到 Stack Overflow!链接是共享知识的好方法,但如果它们在将来失效了,它们就无法真正回答问题。将回答中回答问题的链接的基本内容添加到您的答案中。如果内容过于复杂或太大而无法适应此处,请描述所提出解决方案的一般思路。请记住始终保留对原始解决方案网站的链接引用。参见:如何撰写一个好的答案? - sɐunıɔןɐqɐp

0
以下软件包可在NuGet上找到。
Microsoft.AspNetCore.SignalR 1.0.0-alpha1-final 提供跨Web的实时双向通信组件。
Microsoft.AspNetCore.SignalR.Redis 1.0.0-alpha1-final 适用于ASP.NET Core SignalR的Redis。
这些软件包支持.NET Standard,版本为v2.0。 我在我的项目中使用了这些软件包。 Angular 4 + SignalR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接