2014-02-11 5 views
13

저는 SignalR 2.0 백엔드에 연결하는 Windows 클라이언트를 가지고 있습니다. 이제는 ASP.NET 웹 API 2.1 백엔드에도 연결하려고합니다.SignalR & WebApi - Newtonsoft.Json 참조를 충돌합니다.

나는 웹 API와 통신하는 데 사용하는 라이브러리는 Newtonsoft.Json 6.0.0.0에 의존하지만 Microsoft.AspNet.SignalR.Client 2.0.0.0는 Newtonsoft.Json 4.5.0.0에 의존하는 것 같다.

이것은 Windows 클라이언트이기 때문에 dll 파일은 같은 디렉토리에서 끝나며 두 필수 버전 중 하나만 디스크에 저장되어 signalr-client 또는 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's manifest definition does not match the 
    assembly reference.(Exception from HRESULT: 0x80131040) 

이 SignalR이 Newtonsoft의 최신 버전을 사용하도록하거나 동일한 솔루션에 두 버전을 사용할 수 있도록 할 수 있습니까? 내가 Nuget 포장 및 SignalR을 사용하는 것 암시 적 참조에 아주 새로운 오전 염두에

곰을 ...

솔루션 : 나는 버전으로 내 signalR 클라이언트 라이브러리에 Newtonsoft 참조를 대체 6.0을 사용하고 Kiran Challa가 작성한 어셈블리 리디렉션을 라이브러리의 App.config와 실행 프로젝트의 app.config에 추가하면 이제는 두 라이브러리에서 동일한 어셈블리를 찾아로드합니다.

답변

19

웹 API & SignalR은 4.5 버전의 Json.net 버전을 참조하여 작성되었습니다. 6.0 버전의 Json.net을 사용하려면 구성 파일에 어셈블리 바인딩 리디렉션을 추가해야합니다.

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

고마워요! 내 signalR 클라이언트 라이브러리의 Newtonsoft 참조를 버전 6.0으로 대체하고 어셈블리의 리디렉션을 실행 가능 프로젝트의 app.config뿐만 아니라 라이브러리의 App.config에 추가하여 이제는 두 라이브러리가 동일한 어셈블리를 찾고로드합니다. – MatiasK