[asp.net-mvc-4] 파일 또는 어셈블리 System.Net.Http, 버전 = 4.0.0.0을 ASP.NET (MVC 4) 웹 API OData 프리 릴리즈와 함께로드 할 수 없습니다.

문제

Microsoft ASP.NET Web API OData 패키지 5.0.0-rc1 시험판을 설치 한 후 다음 예외가 발생합니다.

파일 또는 어셈블리 ‘System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT에서 예외 : 0x80131040)

내 MVC 4 프로젝트는 아주 새롭고 정말 작습니다. .NET Framework 4.5를 대상으로합니다.

Delta 클래스를 사용하여 PATCH구현 하려면이 너겟 패키지 가 필요합니다
(패키지 4.0.0.0 버전을 사용하면 Delta 클래스가 작동하지 않습니다).

어떻게 고칠 수 있습니까?

내 버전의 System.Web.Http

에서 GAC 나는 버전이 5.0.0.0 System.Web.Http의를

gacutil -l System.Web.Http 전역 어셈블리 캐시에는 System.Web.Http, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL 어셈블리가 포함되어 있습니다.

에서 비주얼 스튜디오 , 내가 어셈블리를 탐색 할 때, System.Web.Http의 주어진 버전입니다 4.0.0.0 (왜?)

에서 내 프로젝트 , System.Web.Http에 대한 참조

  • 버전 5.0.0.0 있음
  • 패키지의 \ lib \ net45 \ 폴더를 가리 킵니다.
  • CopyLocal = true 있음

내가 시도한 것

Web.config에서 리디렉션 v 4.0.0.0을 5.0.0.0으로 바인딩하려고했습니다.

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="4.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

하지만 또 다른 예외가 있습니다.

‘System.Web.Http.GlobalConfiguration..cctor ()’메서드에서 ‘System.Web.Http.GlobalConfiguration.CS $ <> 9__CachedAnonymousMethodDelegate2’필드에 액세스하지 못했습니다.

v 4.0.0.0은 핵심 Web Api 엔진에서 실제로 사용해야한다고 생각합니다.

연결된 질문

코드 분석 오류 MVC4 Web API에서
‘System.Net.Http, 버전 = 2.0.0.0’파일 또는 어셈블리를로드 할 수 없습니다. MVC4 Web API에서 ‘System.Net.Http, 버전 = 2.0.0.0’파일 또는 어셈블리를로드 할 수 없습니다.



답변

Visual Studio 2013에는이를 처리하는 새로운 기능이 있습니다. 앱을 빌드 할 때 참조되는 어셈블리의 다른 버전에 대한 경고가 표시되어야합니다. 경고를 두 번 클릭하여 web.config에 어셈블리 바인딩 리디렉션을 추가합니다.

자세한 내용은 http://msdn.microsoft.com/en-us/library/2fc472t2.aspx 를 참조하십시오.

아래에서 jeff.eynon은 VS가 파일을 자동으로 편집하도록하려면 web.config를 체크 아웃해야합니다 (TFS 소스 제어를 사용하는 경우). 팁 고마워!


답변

Nuget을 사용하여 WebApi 패키지를 시험판 버전으로 업그레이드하여 작동하도록 만들었습니다.

PM> Microsoft.AspNet.WebApi -Pre

최신 버전의 WebApi를 사용하여 프로젝트를 강제 실행하려면 루트 Web.config를 일부 수정해야합니다.

1) 웹 페이지 버전 2.0.0.0에서 3.0.0.0

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
</appSettings>

2) System.Web.Http 및 System.Net.Http.Formatting에 대해 5.0.0.0으로 바인딩 리디렉션

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

그게 다인 것 같아요

PS : WebAPI OData 5.0 Beta 에서 영감을받은 솔루션 -GlobalConfiguration에 액세스하면 보안 오류가 발생합니다.


답변

나는 같은 문제를 만났고 다음 libs에 대해 CopyLocal을 true로 설정하여 해결했습니다.

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

MVC4 및 NET 4를 사용한다는 것을 추가해야합니다.


답변

이 문제는 프로젝트 템플릿에서 Hot Towel 프로젝트를 업데이트하려고 할 때와 2013 년 10 월 23 일 현재 VS 2012에서 빈 프로젝트를 만들고 Nuget을 통해 HotTowel을 설치할 때 발생했습니다.

문제를 해결하기 위해 Nuget을 통해 Web Api 웹 호스트 및 Web API 패키지를 현재 NuGet의 현재 버전 인 5.0으로 업데이트했습니다 (2013 년 10 월 23 일).

그런 다음 바인딩 지시를 추가했습니다.

<dependentAssembly>
  <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>


답변

또는 NuGet 패키지 관리자 콘솔에서이 작업을 수행 할 수 있습니다.

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

그런 다음 System.Web.Http.WebHost 5.0에 대한 참조를 추가 할 수 있습니다.


답변

참조에서 System.Web.Http 및 System.Net.Http.Formatting을 제거하고 bin 폴더 (nuget에 의해 복사 된 위치)로 이동하여 참조를 다시 추가합니다. 이제 파일 버전은 5.0.0.0입니다.


답변

이 오류는 여러 프로젝트에서 여러 번 발생했습니다.

내가 마침내 알아 낸 것은 빌드 할 때 이미 내 bin 폴더에 system.web.mvc 바이너리 어셈블리의 복사본이 있다는 것입니다.

이를 수정하려면 참조 목록에서 어셈블리를 마우스 오른쪽 버튼으로 클릭하고 “속성”을 선택합니다. “버전”속성을보고 이것이 최신 버전인지 확인하십시오. 그렇다면 “로컬 복사”를 참으로 전환하십시오.

이렇게하면 프로젝트에서 참조 된 버전이 바이너리 폴더에 포함될 버전이됩니다.

여전히 오류가 발생하면 nuGet을 실행하여 최신 버전을 가져온 다음 앞서 언급 한 작업을 다시 시도하십시오.

행운을 빕니다-이 오류는 고통입니다!