2014-03-04 3 views
10

저는 AspNet Web Api Client 5.0을 사용하고 있으며 웹 API 컨트롤러를 테스트하고 있습니다. , 버전 = 4.5.0.0 파일이나 어셈블리를로드 할 수 없습니다 'Newtonsoft.Json :오류 단위 테스트 webapi 컨트롤러

var encservice = new EncryptionService(); 
var acctservice = FakeServices.GetAccountService(); 
var controller = new AccountController(acctservice, encservice); 
controller.Request = new HttpRequestMessage(); 

코드

controller.Request.SetConfiguration(new HttpConfiguration()); 

이 실행될 때 나는 예외

메시지 충돌 문화 = 중립, PublicKeyToken = 30ad4fe6b2a6aeed '또는 그 종속성 중 하나. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT에서 예외 : 0x80131040)

자료 : System.Net.Http.Formatting

스택 트레이스 : System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor()에서의 System.Net .Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters()에서 System.Net.Http.Formatting.MediaTypeFormatterCollection..ctor ()에서 System.Web.Http.HttpConfiguration.DefaultFormatters ()에서 System.Web.Http.HttpConfiguration .. ctor (HttpRouteCollection routes) at System.Web.Http.HttpConfiguration..ctor() C에서 EMR.Test.Controller.AccountControllerTest.Should_Get()에서 : \ PremiumProjectsCollection \ EMR \ SRC \ EMRAzure \ EMRAzure \ EMR.Test \ 컨트롤러 \ AccountControllerTest.cs : NEWSOFT 라인 34

버전. 내가 사용하고 JSON은 6.0

나는 또한 내 confguration 파일

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

에서 사용하는 메신저 테스트 러너를 조립 리디렉션이입니다 MSTEST, VS2012

+0

나는 동일한 문제에 직면하고있다. 너는 그것을 해결 했니? –

+0

@ Jean-FrançoisBeauchamp, Newtonsoft.Json 4.5.0.0에 롤백했습니다. – reggieboyYEAH

+0

동일한 문제가 있습니다. 이 문제가 해결 되셨습니까? –

답변

5

당신은 추가해야합니다 assembly redirect :

<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> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

(. Newtonsoft.Json의 어셈블리 버전이 정확히 6.0.0.0이라고 가정) 나는 자신이 시도하지 않은

+0

고맙습니다.하지만 이미 내 app.config에이 코드가 있습니다. 그리고 여전히 예외를 치고있다. – reggieboyYEAH

+1

app.config 파일은 무엇입니까? –

+0

네, 내 app.config에 있습니다. 단위 테스트 프로젝트에서 – reggieboyYEAH

1

, 하지만 2012 년에 mstest에 버그가있는 것으로 보입니다. app.config 파일을 .testsettings에 사용해야합니다. 그래서이 삭제 나는 Newtonsoft.Json의 버전과 같은 문제가 있었다

(이 문제를 갖는 웹 API 클라이언트 프로젝트에 참조하는 아래에 노트 주석) http://social.msdn.microsoft.com/Forums/vstudio/en-US/234926d1-42c0-4ebb-af39-1626e72f6c39/why-does-assemblybinding-work-only-if-testsettings-file-is-used-vs2012rc?forum=vsunittest

3

:

은 다음 링크를 참조하십시오 이전 버전 참조 및 패키지 관리자 콘솔을 사용하여 내 웹 Api 클라이언트 라이브러리 및 테스트 프로젝트에 최신 버전의 Newtonsoft.Json을 설치했습니다.

Install-Package Newtonsoft.Json - 버전 6.0.8 문제는 이렇게 남아 내가 System.Net.Http.Formatting 및 JSON 내 최신 버전 사이에 충돌이 실현

(u는 최신 버전 인 알아해야 할 수도 있습니다). 이 문제를 해결하기 위해 , 아래의 System.Net.Http 및 System.Net.Http.Formatting 참조를 제거하고 대신 Nuget를 통해 WebApi 클라이언트 라이브러리를 설치

설치 패키지 Microsoft.AspNet.WebApi.Client

이렇게하면 해결됩니다.

0

나는 똑같은 문제를 며칠 앞두고이 문제에 대한 해결책을 찾는데 몇 시간이 걸렸다.

테스트 프로젝트가 이전 버전 인 동안 최신 버전의 NewtonSoft가 설치된 장치를 테스트하고있었습니다.

나는이 문제를 해결하기 위해 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하여 "솔루션 용 Nuget 패키지 관리"옵션을 통해이 솔루션 라이브러리의 버전을 통합했습니다.

현재 솔루션의 프로젝트에있는 모든 NewtonSoft 라이브러리를 업데이트하고 솔루션 디렉토리의 packages라는 폴더에 VisualBasic이 만든 패키지 컨트롤에서 모든 이전 버전을 제거합니다.