파일 또는 어셈블리 "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a"를로드 할 수 없습니다.


168

Visual Studio 2015 Community 및 SQL Server 2016 Express 만 설치된 깨끗한 Windows 10 컴퓨터에 프로젝트를 복사했습니다. Windows 10 및 VS2015 또는 SQL Server와 함께 설치된 다른 프레임 워크 버전은 없습니다.

WebApi 프로젝트를 시작하려고하면 다음 메시지가 나타납니다.

파일 또는 어셈블리 "System.Net.Http, Version = 4.0.0.0, Culture = neutral, 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 Framework 4.6.1을 사용하여 프로젝트를 빌드 한 후 폴더 System.Net.Http에 파일이 없습니다 bin.

파일의 경로는 다음을 가리 킵니다.

C : \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.6.1 \ System.Net.Http.dll

파일의 경로는 다음을 System.Net.Http.Formatting가리 킵니다.

C : \ Development \ MyApp \ packages \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib \ net45 \ System.Net.Http.Formatting.dll

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


NuGet 패키지에서 Web Api를 다시 설치하려고 했습니까?
Mihai Alexandru-Ionut


그 SO 질문에 대한 모든 제안 된 답변을 시도했습니다. 지금까지 아무것도 작동하지 않습니다. 또한 update-package xxx -reinstall내가 사용하는 모든 너겟 패키지를 실행 했습니다. 작동하지 않습니다.
Ivan-Mark Debono


이것을 참조하십시오, 나중에 감사합니다 stackoverflow.com/questions/50536842/…
Ragul

답변:


114

다음 단계를 따르십시오

  1. Visual Studio를 최신 버전으로 업데이트 (중요)
  2. 에서 모든 바인딩 리디렉션 제거 web.config
  3. 이것을 .csproj파일에 추가 하십시오 :

    <PropertyGroup>
      <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
      <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
  4. 프로젝트 구축
  5. 에서 bin폴더이 있어야 (WebAppName).dll.config파일
  6. 여기에 리디렉션이 있어야합니다. web.config
  7. .csproj파일 에서 스니핑 된 위를 제거하십시오.

작동해야합니다


1
이제 파일 또는 어셈블리 'Newtonsoft.Json, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)
EK_AllDay

2
생성 된 파일에서 바인딩 리디렉션을 복사해야한다는 것을 기억해야하므로 처음에는 위의 오류가 발생하지만 bin 폴더로 이동하여 위에서 설명한대로 생성 된 (webappname) .dll.config를 얻으려면 전체 리디렉션 목록을 복사하십시오. web.config에 넣은 다음 다시 컴파일하십시오. 이것은 정말 도움이되었습니다. 너겟 통합 도구를 사용하여 가장 많은 참조를 정리하십시오.
Chris Schaller

4
놀랄 만한. 이것은 실제로 나를 위해 일했습니다. @EK_AllDay AssemblyRedirects를 원래 web.config로 다시 복사해야합니다.
David De Sloovere

3
⭐☝ 전설 배지가 바로 여기에 있습니다! 참고로 AssemblyRedirects를 web.config에 다시 복사하면 더 이상 System.Net.Http에 대한 바인딩없음을 알 수 있습니다 . 따라서 VS는 이제 자체 버전이 아닌 .Net 프레임 워크와 함께 패키지 된 기본 어셈블리를 사용한다고 가정합니다.
EvilDr

1
이 대답은 계산을 멈추기까지 여러 번 저를 구했습니다. 답변 IMHO로 표시되어야합니다.
Sebastian Budka

258

내 web.config (또는 app.config)의 바인딩 정보 변경-내보기의 "해킹"동안 NuGet 패키지 업데이트가 응용 프로그램을 해킹하고 System.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>

4
15 분 후 문제없이 Azure에 한 번 배포 한 후 연속 배포를 통해 OP에 명시된 정확한 오류가 발생하고 서버에서 web.config를 조정하여이 정확한 답변으로 문제를 해결했습니다. 그러나 나는 그것이 왜 처음으로 효과가 있었는지 전혀 모른다. 배포 간의 종속성을 엉망으로 만들지 않았습니다.
bkwdesign

8
잘 했어. 무슨 일이 있었는지 볼 수 있습니다. 기본 도메인 프로젝트에 패키지를 설치했는데 System.Net.Http nuget이 설치되었을 것입니다 (아마도 4.1.x 버전 일 가능성이 높습니다). 사방 경고. 이것은 웹 프로젝트의 문제를 해결했지만 모든 프로젝트에서 패키지 패키지를 참조하는 누군가의 조언은 모든 경고를 제거했습니다. 이전과 새로운 .NET의 혼합에 대해 걱정하는 유일한 사람입니까? 일반적으로 로컬 dll을 너겟 패키지 (dll hell)로 참조하는 것을 두려워합니다.
Nicholas Petersen

3
이것이 올바른 방법에 대한 Microsoft의 답변입니다. github.com/dotnet/corefx/issues/25773
ghanashyaml

18
바인딩 리디렉션을 완전히 제거하면 나에게 도움이되었습니다.
sbkrogers

1
예, system.net.http 및 system.runtime의 행을 제거하십시오. 그러면 상황이 좋아집니다.
ZZZ

32

내 프로젝트 중 하나에는 더 높은 버전의 System.Net.Http가있는 너겟 패키지가있었습니다. 시작 프로젝트에서 System.Net.Http v 4.0.0을 참조하면 시작 프로젝트에 System.Net.Http nuget 패키지 가 설치되어 문제가 해결되었습니다.


내가 솔루션의 세 가지 프로젝트가 -의 그들을 부르 자 A, B하고 C. A시작 프로젝트이며, 하나와는 아무 상관이 없습니다 B또는 C. C에 대한 테스트 프로젝트입니다 B. C참조 (System.Net.Http) 프로젝트에 없었기 때문에 테스트를 실행 하지 못했습니다 A.
Rasmus Bækgaard 2016 년

19

다음과 같이 변경하십시오.

<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />

다음과 같이 :

<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.0.0.0" />

web.config에서


1
당신은 갱스터입니다. 이것은 내 문제를 해결했습니다!
Leonardo Wildt

1
감사합니다 @LeonardoWildt
Muhammad Waqas

12

솔루션에 여러 프로젝트가있는 경우 Visual Studio에서 솔루션 아이콘을 마우스 오른쪽 버튼으로 클릭하고 'Manage NuGet Packages for Solution'을 선택한 다음 네 번째 탭 'Consolidate'를 클릭하여 모든 프로젝트를 동일한 버전의 DLL. 그러면 통합 할 참조 어셈블리 목록이 제공됩니다. 목록에서 각 항목을 클릭 한 다음 오른쪽에 나타나는 탭에서 설치를 클릭하십시오.


4
AutoGenerateBindingRedirects 사용에 대한 @sajeetharan의 답변과 이것을 결합하면 이전 버전의 VS 또는 nuget 패키지가 잘못된 바인딩 문을 남길 수 있습니다. 잘 청소하면 많은 도움이 될 수 있습니다.
Chris Schaller

11

나는에 대한 참조를 주석 때문에 위의 바인드 리디렉션 나를 위해 작동하지 않았다 System.Net.Http에서 web.config. 그것 없이는 모든 것이 잘 작동하는 것 같습니다.

  <system.web>
    <compilation debug="true" targetFramework="4.7.2">
      <assemblies>
        <!--<add assembly="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />-->
        <add assembly="System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
      </assemblies>
    </compilation>
    <customErrors mode="Off" />
    <httpRuntime targetFramework="4.7.2" />
  </system.web>

1
이것은 Visual Studio 2017 (15.9.4)에서 작동하며 .NET 4.7.2 프레임 워크 릴리스와 함께 제공되는 DLL에 대한 직접적인 참조 대신 System.Net.Http (4.3.4) NuGet 패키지를 사용하여 빌드 할 수 있습니다. IDE 내에서 제공된 참조 (다른 종속성이 도입되지 않은)를 사용하려면 다음과 같이하십시오 : 1) web / app.config 바인딩 리디렉션을 제거하십시오. 2) System.Net.Http에 대한 NuGet 패키지를 제거하십시오. .NET 4.7과 함께 제공되는 새로운 4.2.0.0 빌드에.
EnocNRoll-AnandaGopal Pardue

이 4.6.1에서 4.7.2로 응용 프로그램을 마이그레이션, VS2019에서 나를 위해 일한
cklimowski

웹 작업으로 작동하는 콘솔 앱 프로젝트가 있습니다. SendGrid API 클라이언트를 만들 때 해당 예외가 발생했습니다. app.config에서 바인딩 리디렉션을 제거한 후 모든 것이 작동하기 시작했습니다. 이것을 제안 해 주셔서 감사합니다.
kurdemol94

9

프로젝트를 .NET Framework 4.7.2로 업그레이드하여이 문제를 해결할 수 있습니다. 이것은 Alex Ghiondea-MSFT에 의해 답변되었습니다 . 그가 진정으로 가치가 있기 때문에 그를 찬양하십시오!

.NET Framework 4.7.1에서 알려진 문제로 설명되어 있습니다.

해결 방법으로 이러한 대상을 프로젝트에 추가 할 수 있습니다. SGEN에 전달 된 참조 목록에서 DesignFacadesToFilter를 제거하고 SGEN이 완료되면 다시 추가합니다.

<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
  <ItemGroup>
    <DesignFacadesToFilter Include="System.IO.Compression.ZipFile" />
    <_FilterOutFromReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" 
        Condition="'@(DesignFacadesToFilter)' == '@(_DesignTimeFacadeAssemblies_Names)' and '%(Identity)' != ''" /> 
    <ReferencePath Remove="@(_FilterOutFromReferencePath)" />
  </ItemGroup>
  <Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." /> </Target>

<Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies">
  <ItemGroup>
    <ReferencePath Include="@(_FilterOutFromReferencePath)" />
  </ItemGroup>
  <Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has ran." />
</Target>

다른 옵션 (시스템 전체)은 sgen.exe.config에 다음 바인딩 리디렉션을 추가하는 것입니다.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.IO.Compression.ZipFile" publicKeyToken="b77a5c561934e089" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime> This will only work on machines with .NET Framework 4.7.1. installed. Once .NET Framework 4.7.2 is installed on that machine, this workaround should be removed.

위의 링크 질문에 대한이 답변은 이제 관련 답변입니다. stackoverflow.com/a/52883065/54289 자세한 내용은 답변에 대한 의견을 참조하십시오.
EnocNRoll-AnandaGopal Pardue

6

이것은 Visual Studio 2017 (15.9.4)의 .NET 4.7.2에서 작동합니다.

  • web / app.config 바인딩 리디렉션 제거
  • System.Net.Http 용 NuGet 패키지 제거
  • "새 참조 추가"를 열고 .NET 4.7.2와 함께 제공되는 새로운 4.2.0.0 빌드에 직접 연결하십시오.

! [image] (https://user-images.githubusercontent.com/38843378/50998531-b5bb3a00-14f5-11e9-92df-6c590c469349.png)


4

나는 똑같은 문제가 있고 그것을 고칠 수있는 유일한 방법은 app.confing에 bindingRedirect를 추가하는 방법입니다.

그러나 더 많은 프로젝트가있는 솔루션이 있다면 모든 프로젝트를 수동으로 업데이트해야합니다 (때로는 일부 nuget 패키지를 업데이트 한 후에 다시 수행해야합니다). 그리고 모든 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"

아마도 그것은 완벽하지 않으며 누군가가 그것을 사전 구축 작업에 연결하면 더 좋을 것입니다.


3

VS2017의 4.6.1-2 사용자는 VS2017 또는 Msbuild 15에서 사용하려는 버전으로 System.Net.Http 버전을 원치 않게 교체 할 수 있습니다.

이 버전을 여기에서 삭제했습니다.

C : \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ System.Net.Http.dll

그리고 여기:

C : \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ System.Net.Http.dll

그런 다음 프로젝트는 NuGet을 통해 참조한 버전으로 빌드됩니다.


1

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


0

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


0

나를 위해 프로젝트를 최신 버전의 .Net Framework (.Net Framework 4.6.1에서 4.7.2로 변경)에서 실행하도록 설정했습니다.

모든 것이 작동하고 오류없이 발행되었으며 문제없이 게시되었으며, 나는 웹 사이트를 통해 작고 알기 어렵지만 매우 중요한 API 요청으로 표시된 System.Net.Http 오류 메시지를 우연히 발견했습니다. 나는 노력하고 있습니다.

4.6.1로 롤백했으며 모든 것이 다시 정상입니다.


0

나를 위해이 문제를 깨끗하게 해결하는 유일한 방법 (.NET 4.6.1)은 실제로 System.Net.Http를 사용한 프로젝트의 System.Net.Http V4.3.4에 Nuget 참조를 추가하는 것뿐만 아니라 시작 프로젝트 (필자의 경우 테스트 프로젝트).

테스트 프로젝트의 bin 디렉토리에 올바른 System.Net.Http.dll이 있고 .config assemblyBingings도 제대로 보였기 때문에 이상합니다.


0

nuget (.Net 업데이트 및 MVC 업데이트 포함)을 사용하여 이전 웹 사이트를 업데이트하고있었습니다.

VS2017에서 System.Net.HTTP 참조를 삭제하고 (버전 2.0.0.0) 참조를 다시 추가 한 다음 4.2.0.0을 표시했습니다.

그런 다음 nuget을 사용하여 많은 '패키지'를 업데이트하고 오류 메시지를 얻은 다음 무언가가 참조를 2.0.0.0으로 재설정 한 것을 발견하여 다시 제거하고 다시 추가했으며 잘 작동합니다 ... 기괴합니다.

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