2017-01-09 10 views
12

설명 버전 System.Diagnostics.DiagnosticSource에 System.IO.FileLoadException를 생성 System.Net.Http NuGet 패키지 4.3.0. 참조하는 응용 프로그램은 "shared.dll는"System.Net.Http NuGet 패키지 4.3.0 참조 문제의 4.0.0.0 참조

System.IO.FileLoadException

파일이나 어셈블리 'System.Diagnostics.DiagnosticSource를로드 할 수 없습니다 , 버전 = 4.0.0.0, 문화 = 중립, PublicKeyToken 실패 = cc7b13ffcd2ddd51 '또는 해당 종속성 중 하나를 선택하십시오. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT에서 예외 : 0x80131040) System.Net.Http.WinHttpHandler.SendAsync에서

(...)

우리는 위의 실패에 대한 다음과 같은 원인에 와서이 문제를 조사 후 :

  • System.Net.Http v 4.3.0에 대한 패키지 정보 페이지는 System.Diagnostics.DiagnosticSource v 4.3.0 이상의 종속성을 나타냅니다. 이 패키지는 System.Net.Http v 4.3.0이 프로젝트에서 참조 될 때 자동으로 다운로드됩니다.
  • System.Net.Http의 NuGet 패키지 v 4.3.0에는 실제로 System.Net.Http.dll v 4.1.1.0이 포함되어 있습니다 (2017 년 1 월 8 일 기준).
  • NuGet System.Diagnostics.DiagnosticSource 패키지 v 4.3.0에는 실제로 System.Diagnostics.DiagnosticSource v 4.0.1.0이 포함되어 있습니다 (2017 년 1 월 8 일 기준). 4.1.1.0 참조 System.Diagnostics.DiagnosticSource의 V 버전
  • System.Net.Http. 4.0.0.0 enter image description here
  • System.Diagnostics.DiagnosticSource의 V. 4.0.0.0 다운로드 한 DLL이 V 4.0 V에 정확히 일치하지 않습니다 .1.0.
  • 강력한 이름의 라이브러리 참조 버전이 정확히 일치하지 않으면 .NET 런타임에서 참조 된 어셈블리를 찾으려고 시도합니다. 그렇지 않으면 라이브러리로드 예외가 생성됩니다.

    1. 의 app.config 옵션 : 또한 다음 remark

있습니다 몇 해결 방법을 참조 어떤에 대한의 app.config에 binding redirection으로 (? 우리가 그와 함께 가야하는 범위) 호환 버전을 선언 "shared.dll"- 참조하는 응용 프로그램.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> 
    </dependentAssembly> 
</assemblyBinding> 
    버전 4.0.0.0에
  1. 강제 System.Diagnostics.DiagnosticSource.dll을 :. 는 System.Diagnostics.DiagnosticSource의 V 4.0 NuGet 참조를 추가합니다. 0.0을 System.Net.Http를 참조하는 프로젝트에 추가하여 dll 버전 4.0.1.0의 자동 다운로드를 선점합니다. 이 옵션은 NuGet 종속성을 자동으로 업데이트하는 기능을 잃어 버리지 만 구성이 필요없는 응용 프로그램의 배포를 만듭니다.

적절한 문제 해결 방법은 앞서 말한 NuGet 패키지의 불일치를 패키지 소유자가 수정하는 데 있습니다. 소스에서 고정 된 경우 System.Net에 대한 해결 방법이 없습니다.HTTPS 패키지 소비 코드가 필요합니다.

질문 :

System.Net.Http V 4.3.0 패키지는 이전의 정확한 버전 패키지 4.1.1가있는 동안 불일치 System.Net.Http.dll 브이 4.1.1을 포함 왜
  1. ?
  2. 앞서 언급 한 2 가지 해결 방법 중 하나를 계속 진행해야합니까?
  3. 어느 것이 더 낫습니까?
  4. 또는 문제의 다른 해결책이 있습니까?
  5. 또는 : 불일치를 수정하는 NuGet 패키지가 임박한 업데이트가 있습니까?

감사합니다.

+1

.NET Framework 4.6 프로젝트에'System.Net.Http' 4.3.0 설치를 시도해 본 결과 바인딩 리디렉션이 자동으로 생성되었습니다. 자세한 내용은 [dotnet/corefx] (https://github.com/dotnet/corefx/issues/new) GitHub 문제 추적기에서이 질문을 해보십시오. –

+0

감사합니다. GitHub를 통해 질문 할 것입니다. 제거하고 참조를 다시 추가 (VS 20015) 및 app.config 변경되지 않은 (바인딩 리디렉션 없음) 있었다. 우리의 솔루션은 단일 어셈블리 솔루션보다 복잡합니다. 하나의 지붕 아래에 여러 실행 가능 및 공유 라이브러리 어셈블리가 포함되어 있습니다. –

+0

@Joel Verhagen : https://github.com/dotnet/corefx/issues/15031에서 티켓 열기 –

답변

4

답변의 99 %가 이미 있으므로 실제로 내 자신의 질문에 대답하는 것이 정확하다고 느낍니다.

GitHub의/corefx에서 개발 팀

this issue 해상도가 System.Net.Http 프로젝트에서 System.Diagnostics.DiagnosticSource.dll 하드 참조를 제거하는 자연에 의해 또 다른 known issue 수정의 부작용 것 인정했다.

그 때까지 : 제공된 두 가지 대안 중 하나는 개인적인 취향에 따라 사용할 수 있습니다.

+0

내 하루를 저장해 주셔서 감사합니다. Microsoft의 패키지에 잘못된 메타 데이터로 인해이 문제가 발생하는 경우 수정해야합니까? – Benni

+0

필자의 의견으로는 디자인 동작 (강력한 형식의 어셈블리 디자인)에 의한 것입니다. –

4

NuGet에서 System.Net.Http (버전 4.3.1)을 설치하면이 문제가 해결됩니다.

+0

나를 위해 해결되었습니다! – Sam

+0

연구 2 일간의 시간을내어 oldVersion -> newVersion에 대해 다른 설정을 시도해 보았습니다. 동일한 결론이 나오고 그 후에 만 ​​솔루션을 찾을 수 있습니다. –