Почему мой HubConnectionBuilder не работает с HubConnectionBuilder().Build?

#c# #json #http #signalr

#c# #json #http #signalr

Вопрос:

Я пытаюсь узнать, как подключиться к серверу SignalR с помощью клиента C #. И я не уверен, будут ли шаги, которые я выполняю, считаться нормальными (будут работать). Поскольку я, конечно, получаю ошибки…

Я пытаюсь установить соединение с сайтом как:

         var connection = new HubConnectionBuilder()
            .WithUrl(new Uri("http://localhost:5100/appsHub"))
            .WithAutomaticReconnect()
            .Build();
 

Как только я запускаю это, я получаю следующее. Я не совсем уверен, в чем проблема, хотя здесь это из-за ссылки? Или я должен использовать другой проект по умолчанию?

 Inner Exception 1:
FileLoadException: Could not load file or assembly 'System.Text.Encodings.Web, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
 

И затем я хочу отправить идентификатор в URL в виде объекта JSON.

Я пытался заставить это работать в течение недели, и да, я не уверен, как это сделать:(.

Буду признателен за любую помощь.

С уважением,

Комментарии:

1. Есть ли какие-либо пакеты nuget для консолидации в решении?

2. к сожалению, нет. Все чисто, новый проект только с этими строками.

3. Какая целевая структура установлена для проекта? Какую версию Microsoft.AspNetCore.SignalR.Client он использует? Если ваш проект нацелен netcoreapp3.1 , то он должен использовать Microsoft.AspNetCore.SignalR.Client 3.1.x, потому что требуется версия 5 net5 .

4. тип проекта — консольное приложение (.Net Core). Это последняя версия 2.4.1.

5. Я имею в виду прозвище целевого фреймворка (см. Это: docs.microsoft.com/en-us/dotnet/standard/frameworks ), а не тип проекта. Обновил мой комментарий выше.

Ответ №1:

Будьте осторожны с учебниками. Обычно они используют последние версии пакетов. Например. ASP.NET Клиент Core SignalR .NET предлагает сделать это:

 Install-Package Microsoft.AspNetCore.SignalR.Client
 

Это работает нормально, если последняя версия пакета нацелена на ту же версию фреймворка, что и ваш проект. Но если ваш проект нацелен на другую версию фреймворка, вы получите ошибки, подобные тем, которые вы опубликовали.

На данный момент целевой платформой по умолчанию для консольных приложений в VS2019 является netcoreapp3.1 .
Latest Microsoft.AspNetCore.SignalR.Client requires net5.0 .

Либо измените целевую платформу на net5.0 для вашего консольного приложения, либо используйте Microsoft.AspNetCore.SignalR.Client версию v3.1.x (последняя версия совместима с 3.1.10 netcoreapp3.1 ).


Это управление версиями пакетов очень раздражает, IMO.

У нас около 300 проектов, и наша версия LTS будет использоваться netcoreapp3.1 до конца своей жизни. Если открыть исходные тексты версий LTS и вкладку Nuget внутри VS now, он увидит много «доступных» обновлений пакетов. Но эти обновления не могут быть применены из-за несовместимых версий фреймворка. Этот мусор скрывает важные обновления для ряда сторонних пакетов, которые предназначены netstandard для .NET Core /.NET и не принадлежат им.NET.

В результате теряется много времени на мониторинг обновлений для сторонних пакетов.

Комментарии:

1. Ах, хорошо. Я новичок в c #, но да, это проблема! Похоже, это решило проблему, и теперь я вернулся к своим первоначальным проблемам с самим кодом! Это сработало!!!!! УДИВИТЕЛЬНО!!! Вы можете видеть мою радость от этого!!

Ответ №2:

Вероятно, ваша проблема заключается в несовместимости версий фреймворка проекта и «* .SignalR.Пакет «Клиент».

Щелкните правой кнопкой мыши на вашем проекте и проверьте целевую версию framework в меню свойств. Версии должны быть совместимы с «* .SignalR.Пакет «Клиент».

как здесь