Конфликт зависимости от конфликта RavenDB и SignalR Nuget

Основной конфликт.

SignalR хочет Newtonsoft.Json версии 4.0.7 или выше, в то время как RavenDB хочет версию, равную 4.0.5. Очевидно, что они не могут быть установлены бок о бок.

Таким образом, помимо загрузки исходного кода из одного из них и получения зависимостей, обнаруженных локально, необходимо проверить созданный из него двоичный файл, существует ли возможный способ сохранить зависимости, управляемые с помощью NuGet, и, возможно, просто переслать DLL-вызовы (например, Mvc делает с каждой новой версией)?

Ответ 1

Мы столкнулись с тем же вопросом несколько дней назад, и это неприятно. Мы обнаружили, что вы не можете поддерживать зависимости, управляемые с помощью NuGet. Вместо этого мы изменили SignalR на использование 4.0.5 и скомпилировали его локально.

Ответ 2

Существует даже более подходящий способ обойти этот конфликт. Поскольку .NET дает нам возможность перенаправить сборки, почему бы не использовать его;)

Вы можете просто добавить что-то подобное в свой App.config(позаботьтесь о том, что уже есть сборка):

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

С помощью этого набора перенаправления вы можете просто добавить пакет RavenDB и пакет SignalR (каждый из них ссылается на другую версию JSON.NET), и он исправляет.

Кроме того, я сделал запрос pull on SignalR, чтобы запросить поддержку JSON.NET в версии 4.0.5 (так как он должен быть обратно совместимым )