这基本上是原问题的复制,但存储库已被归档,所以我不能在那里提问:https://github.com/aspnet/SignalR/issues/1645
我正在尝试使运行.NET Framework的旧应用程序通过SignalR连接到运行.NET Core的新应用程序。
我读到一些帖子说AspNetCore和AspNet版本的SignalR不兼容,因此目标是在.NET Framework应用程序上运行Microsoft.AspNetCore.SignalR.Client。
我使用4.6.1框架版本创建了一个测试项目,我认为它是.NET Standard 2.0,因此根据davidfowl的评论,我应该能够安装此程序包https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR.Client/1.0.0-preview1-final 我无法在我的4.6.1项目中安装此包,所以我一定做错了什么。
我通过进入4.6.1项目中的引用、右键单击、添加引用并选择我的netstandard2.0项目来进行参考。 我用以下代码在4.6.1中调用此代码:
我使用4.6.1框架版本创建了一个测试项目,我认为它是.NET Standard 2.0,因此根据davidfowl的评论,我应该能够安装此程序包https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR.Client/1.0.0-preview1-final 我无法在我的4.6.1项目中安装此包,所以我一定做错了什么。
我还尝试了另一种解决方法,即使用Microsoft.AspNetCore.SignalR.Client v3.1.6代码创建一个netstandard2.0库,然后从我的4.6.1项目中引用.dll。
在我的netstandard2.0库中,3.1.6代码如下:
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Concurrent;
public class SignalRConnection
{
private readonly HubConnection hubConnection;
public SignalRConnection(string endpoint)
{
this.endpoint = endpoint;
hubConnection = new HubConnectionBuilder()
.WithUrl(endpoint)
.Build();
}
}
我通过进入4.6.1项目中的引用、右键单击、添加引用并选择我的netstandard2.0项目来进行参考。 我用以下代码在4.6.1中调用此代码:
class Program
{
static void Main(string[] args)
{
SignalRConnection connection = new SignalRConnection("http://localhost:8080/status");
}
}
我认为这可能是因为我没有使用1.0.0版本,所以我也尝试了那个版本。但是每个不同的版本都会出现相同的FileNotFoundException异常。
System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.AspNetCore.SignalR.Client.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The system cannot find the file specified.'
有人成功地使用SignalR将.NET Framework应用程序连接到.NET Core应用程序,并能否给我一些指针,告诉我我错在哪里?谢谢。
编辑:
我能够在使用VS 2019的4.6.1项目中安装此软件,但是当我尝试在使用VS 2015的4.6.1项目中安装时,出现了上述错误。
Microsoft.AspNetCore.SignalR.Client
的 NuGet 包没有包含你的项目所需的程序集。目前 NuGet 存在一个重大设计缺陷,即当你安装一个不添加任何程序集引用依赖项到目标项目的包时,它不会阻止你(甚至不会警告你!)。 - Dai