이상한 문제가 있습니다.
MVC 4와 새로운 웹 API로 앱을 개발했으며 로컬에서 잘 작동합니다. 서버에 MVC4를 설치하고 앱을 배포했습니다. 이제 다음 오류가 발생합니다.
파일 또는 어셈블리 ‘System.Net.Http, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT에서 예외 : 0x80131040)
설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 오류가 발생한 위치에 대한 자세한 내용은 스택 추적을 검토하십시오.
재미있게도 패키지 폴더 나 ASP.NET MVC 4 \ Assemblies 폴더에 로컬로있는 System.Net.Http의 버전은 1.0.0.0입니다. 실제로 내 프로젝트에서 System.Net.Http에 대한 참조를 제거했지만 여전히 동일한 메시지가 나타납니다. 2.0.0.0 참조를 어디에서 가져오고 왜 로컬에서 작동하지만 서버에서는 작동하지 않는지에 대해 약간 혼란 스럽습니다.
너겟 종속성 살펴보기 :
ASP.NET WEb API 코어 라이브러리 (베타)는 System.Net.Http.Formatting에 의존합니다.
그리고 System.Net.Http.Formatting은 System.Net.Http에 따라 다릅니다.
나는 이것이 이것이 어디에서 오는지 생각합니다. 하지만이 패키지의 버전 2.0.20126.16343이 설치되어 있습니다. 내부의 dll에 버전 1.0.0.0이 있습니다.
내가 뭔가를 놓치고 있습니까?
최신 정보:
이것은 다른 ASP.NET 앱의 하위 응용 프로그램이지만 다른 하나는 여전히 WebForms를 기반으로합니다. 그래서 뭔가 엉망이되고 있습니다. 그러나 web.config의 어셈블리 섹션에서 정리하면 더 이상 앱 자체를 찾을 수 없습니다.
답변
appharbor에 내 앱을 배포하는 데 동일한 문제가 발생했습니다. 아직 .NET 4.5를 지원하지 않는 문제. 제가 한.
- 내 프로젝트를 .NET 4.0 프로필로 전환했습니다.
- Web API NuGet 패키지를 제거했습니다.
- Web API (베타) NuGet 패키지를 다시 설치했습니다.
- .csproj 파일에 모든 참조 어셈블리가 포함되어 있는지 확인하여 항상 GAC 대신 Bin 폴더에서 가져옵니다.
답변
IIS 6.0에서 이전에 변환 된 (.NET 4.5에서 4.0으로) 웹 앱을 배포하는 동안 동일한 오류가 발생했습니다.
web.config 런타임 섹션에서
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
내가 변경 한
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
이제 매력처럼 작동합니다.
답변
내 작업 :
1-4에서 2.0으로의 리디렉션에 유의하십시오.
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
답변
프로젝트의 References 폴더에이 dll에 대한 참조가 있어야하며 버전은 2.0.0.0이어야합니다. Copy Local = true로 설정되어 있는지 확인하십시오. 그런 다음 서버 앱의 bin 폴더로 이동하는지 확인하십시오.
이것은 현재 nuget에서 관리하는 라이브러리 중 하나입니다. 따라서 Nuget을 열고 모든 것이 최신 상태인지 확인하십시오. 그리고 프로젝트 패키지 디렉토리에 파일이 있어야합니다.
\packages\System.Net.Http.2.0.20126.16343\lib\net40
새 MVC4 앱을 만들어 파일이 해당 앱에 표시되는지 확인할 수도 있습니다.
답변
제 경우에는 훨씬 더 쉬운 방법으로 수정했습니다. nuget 패키지에 대한 참조에 대한 HintPath를 제공하면됩니다.
<Reference Include="System.Data.Entity" />
<Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Private>True</Private>
+ <HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.WebRequest, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Private>True</Private>
+ <HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Security" />
답변
제 경우에는 NuGet을 통해 실수로 System.Net.Http 버전 2.1.10.0에 종속성을 추가했습니다. NuGet 패키지 관리자에서 제거 할 수 없습니다 (다른 패키지가 종속 된 것처럼 보였기 때문). 그러나 이러한 패키지는이 특정 버전에 종속되지 않습니다. 이를 제거하기 위해 내가 한 작업은 다음과 같습니다 (대신 NuGet 콘솔을 사용할 수도 있습니다 (–force 매개 변수 사용).
- packages.config의 Microsoft.Net.Http 버전을 2.1.10.0에서 2.0.0.0으로 변경
- NuGet 패키지 관리자에서 BCL 이식성 팩 제거
- 종속 라이브러리 (버전 2.1.10.0이있는 System.Net.Http. *)를 수동으로 제거
- System.Net.Http 2.0.0.0에 대한 참조 추가
답변
파일 구성에서 종속 어셈블리를 삭제했습니다.
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
<dependentAssembly>
이제 잘 작동합니다.