Подтвердить что ты не робот

SignalR & WebApi - встречные ссылки Newtonsoft.Json

У меня есть клиент Windows, который подключается к back-end SignalR 2.0, теперь я пытаюсь подключиться к серверу ASP.NET Web API 2.1.

Библиотека, которую я использую для связи с веб-api, зависит от Newtonsoft.Json 6.0.0.0, но Microsoft.AspNet.SignalR.Client 2.0.0.0, похоже, полагается на Newtonsoft. Json 4.5.0.0.

Так как это клиент Windows, dll файлы попадают в один и тот же каталог, и только одна из двух требуемых версий закончится на диске, иначе либо клиент signalr-клиент, либо HttpClient не смогут загрузить свою версию Newtonsoft.json dll.

Ошибка SignalR, если версия 6. * находится на диске:

  Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0,
  Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its 
  dependencies. The located assembly manifest definition does not match the 
  assembly reference.(Exception from HRESULT: 0x80131040)

Можно ли заставить SignalR использовать новую версию Newtonsoft или использовать обе версии в одном решении?

Имейте в виду, что я очень новичок в упаковке Nuget и неявных ссылках, которые, по-видимому, используют SignalR...

Решение: Я заменил ссылку Newtonsoft в моей клиентской библиотеке signalR с версией 6.0 и добавил перенаправление сборки, как описано ниже Kiran Challa, в библиотеку App.config, а также app.config исполняемого проекта, теперь обе библиотеки ищут и загрузите ту же самую сборку.

4b9b3361

Ответ 1

Веб-API и SignalR были созданы со ссылкой на версию сборки Json.net версии 4.5. Если вы хотите использовать версию Json.net версии 6.0, вам нужно будет добавить перенаправление привязки сборки в файл конфигурации.

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>