2016-07-16 1 views
33

Visual Studio 2015 Community 및 SQL 만있는 깨끗한 Windows 10 시스템에 프로젝트를 복사했습니다. 서버 2016 Express가 설치되었습니다. Windows 10 및 VS2015 또는 SQL Server와 함께 설치된 프레임 워크 버전과 다른 프레임 워크 버전은 설치되어 있지 않습니다. 나는 WebApi 프로젝트를 시작하려고하면파일 또는 어셈블리를로드 할 수 없습니다. "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a"

내가 메시지를 얻을 :

는로드 할 수 없습니다 파일이나 어셈블리 'System.Net.Http, 버전 = 4.0.0.0을, 문화 = 중립, PublicKeyToken은 = b03f5f7f11d50a3a " 또는 종속성 중 하나가 될 수 있습니다. 시스템이 지정된 파일을 찾을 수 없습니다.

프로젝트의 패키지는 다음과 같습니다

<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" /> 
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" /> 
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" /> 
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net45" /> 
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" /> 

.NET 프레임 워크 4.6.1, System.Net.Http 사용하여 파일을 프로젝트를 빌드 한 후에는 bin 폴더에서 찾을 수 없습니다.

파일의 경로 포인트 :

C : \의 Program Files (x86) \ 참조 어셈블리 \ 마이크로 소프트 \ Framework.NETFramework \ v4.6.1 \ System.Net.Http.dll

C :에 System.Net.Http.Formatting

파일의 경로 \ 개발 \ MyApp를 \ 패키지 \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib 디렉토리 \ net45 \ System.Net.Http.Formatting.dll

프로젝트 전체가 4.5.1을 대상으로해야합니까, 아니면 올바른 어셈블리를 참조 할 수있는 다른 방법이 있습니까?

+0

일을해야 csproj 파일에서 냈다 위를 제거? –

+0

관련 : http://stackoverflow.com/questions/19491860/could-not-load-file-or-assembly-system-web-http-4-0-0-after-update-from-2012-to –

+0

시도 그 모든 질문에 대답을 제안했다. 지금까지 아무것도 작동하지 않습니다. 나는 또한 내가 사용하고있는 모든 너겟 패키지에 대해'update-package xxx -reinstall'을 실행했다. 그것도 작동하지 않습니다. –

답변

67

내 web.config (또는 app.config)에서 바인딩 정보를 변경하는 중 - 내보기의 "해킹"동안 NuGet 패키지 업데이트가 응용 프로그램을 우회하여 프로젝트를 진행할 수 있으며 시스템 .Net.Http 오류입니다.

설정 NEWVERSION = "4.0.0.0"

<dependentAssembly> 
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.0.0.0" /> 
</dependentAssembly> 
+1

한 번 문제없이 Azure에 배포 한 후 15 분 후에 연속 배포는 나에게 OP에 명시된 정확한 오류를 주었고이 정확한 대답으로 서버의 web.config를 조정하여 내 문제를 해결했습니다. 그러나, 나는 왜 그것이 처음으로 작동했는지 전혀 모른다. 배포 간 내 의존 관계를 망쳐 놓지 않았습니다. – bkwdesign

+1

내 문제를 해결, 고마워, 1000 엄지 손가락 최대 이 문제를 해결하는 동안되었습니다 – user1505015

+0

이것은 또한 내가 생각할 수있는 거의 모든 것을 시도한 후에 나를 위해 일했습니다. –

3

나는이 같은 문제를 가지고있는 유일한 방법 내가 그것을 고칠 수 얼마나 tripletdad99 @ 쓴 방법 app.confing하는 bindingRedirect를 추가합니다.

그러나 더 많은 프로젝트가있는 솔루션을 가지고 있다면 손으로 모든 프로젝트를 정말로 빨아들입니다. (또한 때로는 일부의 너겟 패키지를 업데이트 한 후에 다시해야합니다.) 그리고 그것이 모든 app.configs라면 간단한 powershell 스크립트를 작성한 이유입니다.

param(
    [string]$SourceDirectory, 
    [string]$Package, 
    [string]$OldVersion, 
    [string]$NewVersion 
) 

Write-Host "Start fixing app.config in $sourceDirectory" 
Write-Host "$Package set oldVersion to $OldVersion and newVersion $NewVersion" 
Write-Host "Search app.config files.." 
[array]$files = get-childitem $sourceDirectory -Include app.config App.config -Recurse | select -expand FullName 
foreach ($file in $files) 
{ 
    Write-Host $file 
    $xml = [xml](Get-Content $file) 
    $daNodes = $xml.configuration.runtime.assemblyBinding.dependentAssembly 
    foreach($node in $daNodes) 
    { 
     if($node.assemblyIdentity.name -eq $package) 
     { 
      $updateNode = $node.bindingRedirect 
      $updateNode.oldVersion = $OldVersion 
      $updateNode.newVersion =$NewVersion 
      Write-Host "Fix" 
     } 
    } 
    $xml.Save($file) 
} 

Write-Host "Done" 

예 사용하는 방법 :

./scripts/FixAppConfig.ps1 -SourceDirectory "C:\project-folder" -Package "System.Net.Http" -OldVersion "0.0.0.0-4.3.2.0" -NewVersion "4.0.0.0" 

은 아마 완벽하지 않고 누군가가 작업 빌드 사전에 연결하는 경우 또한 더 좋을 것이다.

7

내 프로젝트 중 하나에는 System.Net.Http의 상위 버전과 함께 nuget 패키지가있었습니다. 내 시작 프로젝트에서는 System.Net.Http v 4.0을 참조합니다.0, 방금 시작 프로젝트에 을 설치했는데 문제가 해결되었습니다.

0

.net 프레임 워크 버전을 확인하십시오.
원래 .net 프레임 워크는 이전 버전입니다.
.net 프레임 워크 4.6을 설치 한 후이 문제는 자동으로 해결됩니다.

1

나는 이것을 가지고 있었지만 바인딩 리디렉션을 업데이트 한 NuGet 패키지를 추가했기 때문입니다. 패키지를 제거한 후에는 리디렉션이 여전히있었습니다. 나는 그들 모두를 제거한 다음 update-package -reinstall을 실행했습니다. 이로 인해 올바른 리디렉션이 추가되었습니다.

4

다음 단계에 따라 최신 버전으로

  1. 갱신 비주얼 스튜디오
  2. csproj 파일이 추가 Web.config의 모든 바인딩 리디렉션을 제거 (중요) :

<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>

  1. 빌드.
  2. bin 폴더에는 (WebAppName).dll.config 파일이 있어야합니다.
  3. 리디렉션이 있어야합니다. 이들의 Web.config
  4. 에 복사 다시
  5. 그것은 당신이 NuGet 패키지에서 웹 API를 다시 시도
관련 문제