2012-02-20 19 views
10

Podstawowy konflikt.Konflikt zależności pakietów RavenDB i SignalR Nuget

SignalR chce Newtonsoft.Json w wersji 4.0.7 lub wyższej, podczas gdy RavenDB chce wersji równej 4.0.5. Co oczywiście oznacza, że ​​nie można ich zainstalować obok siebie.

Więc oprócz pobrania kodu źródłowego z jednego z nich i uzyskania zależności ustalonych lokalnie, musisz sprawdzić utworzony z nich plik binarny, czy istnieje możliwy sposób zarządzania zależnościami za pomocą NuGet, a może po prostu do przodu wywołania DLL (jak na przykład Mvc z każdą nową wersją)?

+0

napotkasz ten jeden, jak również. Zgodnie z numerem wersji nuget spec newtonsoft.json 4.0.8 powinien być zgodny z 4.0.5. Albo RavenDb, albo Newtonsoft.Json robi coś złego. Naprawdę denerwujące. – terjetyl

+1

Zauważ, że RavenDB obsługuje teraz 4.0.8 –

+0

To świetnie. Poczekaj kilka dni i wszystkie problemy zostaną rozwiązane :) – dasheddot

Odpowiedz

3

Kilka dni temu braliśmy udział w tym samym wydaniu, a to jest paskudne. Odkryliśmy, że nie można utrzymywać zależności zarządzanych przez NuGet. Zamiast tego zmieniliśmy SignalR na 4.0.5 i skompilowaliśmy go lokalnie.

+0

Tak, SignalR jest zdecydowanie tym, który skończę robić lokalnie. – Rangoric

+0

Kompilując je lokalnie, masz na myśli uzyskanie kodu źródłowego SignalR, zmianę odniesienia do Newtonsoft.Json, kompilowanie, a następnie umieszczenie skompilowanego kodu w swoim rozwiązaniu? –

+0

Tak, to właśnie miałem na myśli. Jednak (!) Nie ma już potrzeby radzenia sobie z tym w RavenDB 2.0, ponieważ zależności od Newtonsoft.Json zostały zinternalizowane, więc nie ma już konfliktu! –

10

Istnieje nawet bardziej odpowiedni sposób na obejście tego konfliktu. Od NET daje nam możliwośc redirect assemblies, dlaczego nie wykorzystać go;)

Można tylko dodać coś takiego do app.config (zadbać jeśli istnieje już assemblyBinding umieszczone):

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

Za pomocą tego zestawu przekierowań można po prostu dodać pakiet RavenDB i pakiet SignalR (każdy z nich odnosi się do innej wersji JSON.NET), a to naprawia.

Dodatkowo Zrobiłem pull request on SignalR poprosić obsługę Json.NET w wersji 4.0.5 też (ponieważ powinien on być kompatybilny wstecz)

+3

Awesome. Nie znałem przekierowania ... –

+1

Przekierowanie jest dość niebezpieczne. Na przykład, gdy ponownie zmieniliśmy użytkownika na nowszą wersję Json.NET RavenDb zaczął pomijać pola z Guids w dokumentach. –

+1

Będę musiał to później sprawdzić, ale nie mogę zainstalować obu pakietów. Czy chcesz powiedzieć, że NuGet rozpoznaje przekierowanie i odpowiednio ładuje pakiety? Czy jest tam pewna kolejność, którą musiałbym wykonać? (Jeśli to pojawi się ponownie. – Rangoric

Powiązane problemy