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


81

문제

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'파일 또는 어셈블리를로드 할 수 없습니다.


1
아마도이 답변이 도움이 될 수 있습니다 : stackoverflow.com/a/18700279/795876
fsenart 2013-09-24

답변:


164

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

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

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


7
나는 이것을 10 번 찬성 할 수 있으면 좋겠다. VS가 이것을 자동으로하는 것이 좋았습니다. 팁 감사합니다!
Bob Horn

4
불행히도 항상 작동하지는 않습니다. 사실이 경고를 두 번 클릭해도 아무 효과가 없습니다.
Trevor de Koekkoek 2014 년

3
수정중인 웹 / 앱 구성을 체크 아웃해야합니다. 어떤 이유로 든 VS는이 경우 파일을 기꺼이 확인하지 않는 것 같습니다.
jeff.eynon

39

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에 액세스하면 보안 오류가 발생합니다.


3
이것은 나를 위해 일했습니다-업데이트 된 system.net.http 종속성으로 인해 최신 CORS 웹 API 패키지를 설치할 때 이와 동일한 문제가 발생했습니다.
sandeep talabathula

1
록맨, 정말 고마워. 제 경우에는 웹 구성이 너겟 복원으로 업데이트되지 않았으며 배포 후 수동으로 수행했습니다.
Leandro

마찬가지로, 이것은 VS가 당신을 위해 이것을하지 않을 때 당신이 직접 바인딩을 할 수 있도록이 대답이 필요하기 때문에 +1을받습니다.
Michael Blackburn

11

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

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

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


1
이것은 또한 나를 위해 그것을 해결했습니다-그러나 이것이 실제로 무엇을 의미하는지 정말로 알고 싶습니다.
serup

11

이 문제는 프로젝트 템플릿에서 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>

8

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

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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


4

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


1

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

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

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

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

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

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


1

나는 같은 오류에 직면했다. 종속성 주입을위한 Unity 프레임 워크를 설치할 때 Http 및 HttpFormatter의 새로운 참조가 내 구성에 추가되었습니다. 그래서 여기에 내가 따랐던 단계가 있습니다.

nuGet 패키지 관리자 콘솔에서 다음 명령을 실행했습니다. PM> Install-Package Microsoft.ASPNet.WebAPI -pre

버전 5.0에서 dll에 대한 물리적 참조를 추가했습니다.


1

나는 너겟으로 해결한다. 처음으로 너겟을 설치합니다. 사용하는 두 번째.
그림은 다음과 같습니다.

세 번째 : "Version"속성을보고 이것이 최신 버전인지 확인합니다.

마지막 : 프로젝트가 최신 버전인지 다시 확인합니다.


0

동일한 유형의 문제에 직면했으며 아래 단계에 따라 문제를 해결했습니다.

도구-> 라이브러리 패키지 관리자-> 패키지 관리자 콘솔로 이동하여 아래 명령을 실행하십시오.

설치 패키지 Microsoft.ASPNet.WebAPI -pre


0

Web.config위에서 언급 한대로 파일 의 참조를 수정 한 후 참조를 해결했습니다.

비슷한 문제에 직면했습니다.

우리를 위해 우리는 참조가 Microsoft.Data.Edm.dllOData.dll및 프로그램 파일에서 다른 어셈블리 :

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                          \bin\.NETFramework\Microsoft.Data.Edm.dll

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                        \bin\.NETFramework\Microsoft.Data.OData.dll

버전은 5.6.4 입니다.

두 어셈블리의 참조를로 변경 C:\....Project\packages\Microsoft.Data.Edm.5.6.0하면 문제가 해결되었습니다.


0

nuget 패키지 관리자로 이동하여 패키지를 업데이트했습니다. 이제 작동합니다. 내가 업데이트 한 주요 항목은 Microsoft.AspNet.WebApi.Core입니다. 적절한 참조를 동기화하려면 두 프로젝트 모두에서이 작업을 수행해야 할 수 있습니다.


0

이 문제가 발생하면 아래 섹션에서 web.config를 확인하십시오.

아래 섹션은 사용 된 특정 dll의 버전을 제공합니다.

web.config에서이 섹션을 확인한 후 솔루션 탐색기를 열고 그림과 같이 프로젝트 트리에서 참조를 선택합니다. 솔루션 탐색기-> 참조

참조를 확장 한 후 오류를 일으킨 dll을 찾으십시오. dll 참조를 마우스 오른쪽 버튼으로 클릭하고 위 이미지와 같은 버전을 확인하십시오.

구성 dll 버전과 참조 된 dll이 모두 다른 경우이 예외가 발생합니다. 둘 다 도움이 될 동일한 버전인지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.