2012-02-20 3 views
10

기본 충돌.RavenDB 및 SignalR Nuget 패키지 종속성 충돌

SignalR은 Newtonsoft.Json 버전 4.0.7 이상을 원하지만 RavenDB는 4.0.5 버전을 원합니다. 분명히 그들이 나란히 설치 될 수 없다는 것을 의미합니다.

그 중 하나에서 소스 코드를 다운로드하고 로컬에서 알아 낸 종속성을 얻는 것을 제외하고 NuGet으로 관리되는 의존성을 유지할 수있는 방법이 있습니까? DLL 호출 (예 : Mvc가 각각의 새 버전 에서처럼)?

+0

실행에 JSON.NET에 대한 지원을 요청하는 pull request on SignalR을했다. nuget 버전 번호 스펙에 따르면 newtonsoft.json 4.0.8은 4.0.5와 호환되어야합니다. RavenDb 또는 Newtonsoft.Json이 잘못된 것을하고 있습니다. 정말 짜증나. – terjetyl

+1

RavenDB는 이제 4.0.8 –

+0

을 지원합니다. 며칠을 기다렸다가 모든 문제가 해결되었습니다 :) – dasheddot

답변

3

며칠 전에 같은 문제가 발생했습니다. NuGet으로 관리되는 종속성을 유지할 수없는 것으로 나타났습니다. 대신 SignalR을 4.0.5로 변경하고 로컬로 컴파일했습니다.

+0

그래, SignalR은 분명히 내가 로컬 일을 끝낼 것이다. – Rangoric

+0

로컬에서 컴파일하면 SignalR 소스 코드를 받고, Newtonsoft.Json에 대한 참조를 변경하고, 컴파일 한 다음, 컴파일 된 코드를 솔루션에 배치한다는 의미입니까? –

+0

예, 그 당시에 제가 의미했던 것입니다. 그러나 (!) Newtonsoft.Json에 대한 의존성이 더 이상 충돌이 없도록 내부화되어 있기 때문에 더 이상 RavenDB 2.0에서이를 처리 할 필요가 없습니다! –

10

이 충돌을 해결하는 더 적절한 방법이 있습니다. .NET은 우리에게 그것을 사용하지 왜 redirect assemblies,에 possiblity를 제공하기 때문에,

당신은 당신의의 App.config (이미 배치 된 assemblyBinding)가있는 경우 알아서에 그런 일을 추가 할 수 있습니다) :

<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을 참조)를 추가하기 만하면됩니다.

또한 나뿐만 아니라이 일에 너무 버전 4.0.5 (이 호환되어야합니다 이후)

+3

굉장합니다. 리디렉션되는 것을 알지 못했습니다 ... –

+1

리디렉션은 꽤 위험합니다. 예를 들어 우리가 Json.NET RavenDb의 사용자 newver 버전으로 다시 작성했을 때 문서의 Guids 필드가 누락되기 시작했습니다. –

+1

나중에 살펴 봐야 겠지만 두 패키지를 모두 설치할 수는 없습니다. 그렇다면 NuGet이 리디렉션을 인식하고 이에 따라 패키지를로드 할 것이라고 말하는 것입니까? 아니면 내가 이것을 할 필요가있는 특정 순서가 있습니까? (이것이 다시 나타나면. – Rangoric