2012-02-20 27 views
10

Conflicto básico.RavenDB y SignalR Nuget Package Dependency Conflict

SignalR quiere Newtonsoft.Json versión 4.0.7 o superior, mientras que RavenDB quiere una versión igual a 4.0.5. Lo que obviamente significa que no se pueden instalar uno al lado del otro.

Así que aparte de descargar el código fuente de uno de ellos y obtener las dependencias resueltas localmente, entonces hay que verificar el binario creado a partir de eso, ¿hay alguna manera de mantener las dependencias administradas con NuGet, y tal vez simplemente reenviar las llamadas a DLL (como Mvc hace con cada nueva versión, por ejemplo)?

+0

Ejecutar en éste también. Según la especificación del número de versión nuget, newtonsoft.json 4.0.8 debería ser compatible con 4.0.5. O RavenDb o Newtonsoft.Json está haciendo algo mal. Realmente molesto. – terjetyl

+1

Tenga en cuenta que RavenDB ahora es compatible con 4.0.8 –

+0

Eso es genial ... espere unos días y se resuelven todos sus problemas :) – dasheddot

Respuesta

3

Nos encontramos con el mismo problema hace unos días y este es desagradable. Descubrimos que no puede mantener las dependencias administradas con NuGet. En cambio, hemos cambiado SignalR para usar 4.0.5 y lo hemos compilado localmente.

+0

Sí, SignalR es definitivamente el que terminaría haciendo localmente. – Rangoric

+0

Al compilarlo localmente, ¿quiere decir obtener el código fuente de SignalR, cambiar la referencia a Newtonsoft.Json, compilar y luego colocar el código compilado en su solución? –

+0

Sí, eso es lo que quise decir en ese entonces. Sin embargo (!) No hay necesidad de lidiar con eso en RavenDB 2.0 más ya que las dependencias a Newtonsoft.Json se han internalizado para que ya no exista conflicto. –

10

Hay incluso una forma más apropiada de evitar este conflicto. Desde .NET nos da la posibilidad de redirect assemblies, por qué no usarlo;)

Usted puede añadir algo así a su App.config (tenga cuidado si ya existe una assemblyBinding colocado):

<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> 

Con este conjunto de redirección, simplemente puede agregar el paquete RavenDB y el paquete SignalR (cada uno de ellos se refiere a otra versión de JSON.NET) y realiza la reparación.

Además hice una pull request on SignalR a solicitar apoyo para JSON.NET en la versión 4.0.5 también (ya que debe ser compatible con versiones anteriores)

+3

Impresionante. No sabía la cosa de redirigir ... –

+1

Redirigir es bastante peligroso. Por ejemplo, cuando se redirigió al usuario nueva versión de Json.NET RavenDb comenzó a perder campos con Guids en documentos. –

+1

Tendré que ver esto más tarde, pero no puedo instalar ambos paquetes. Entonces, ¿estás diciendo que NuGet reconoce la redirección y cargará los paquetes en consecuencia? ¿O hay un cierto orden que necesitaría hacer esto? (Si esto aparece de nuevo. – Rangoric

Cuestiones relacionadas