Reputation: 708
Description of the problem:
A shared library "shared.dll" project references System.Net.Http NuGet package 4.3.0. The application that references "shared.dll" fails with
System.IO.FileLoadException
Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
at System.Net.Http.WinHttpHandler.SendAsync(...)
After investigating this issue we came to the following cause for the above failure:
There are couple workarounds:
<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>
There is a nagging feeling though that the proper issue solution lies in fixing the aforementioned NuGet packages inconsistencies by the package's owners. When fixed at the source, no workaround for System.Net.Http package consuming code would be required.
Questions:
Thanks.
Upvotes: 19
Views: 10018
Reputation: 857
Neither assembly binding redirects nor adding a reference to System.Net.Http worked for me. I have no idea why. What ultimately did work for me was to remove the version specification and specify a HintPath
directly to the DLL. So, I went from this:
<Reference Include="System.Diagnostics.DiagnosticSource, Version=6.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
to this:
<Reference Include="System.Diagnostics.DiagnosticSource, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.6.0.0\lib\net461\System.Diagnostics.DiagnosticSource.dll</HintPath>
<Private>True</Private>
</Reference>
and that seems to have done the trick. I don't like losing the direct version reference, but there didn't seem to be any other way.
Upvotes: 0
Reputation: 28425
In my case the
FileLoadException: Could not load file or assembl y 'System.Diagnostics.DiagnosticSource, Version=4.0.3.0, Culture=neutral, Public KeyToken=cc7b13ffcd2ddd51'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
started when to Asp.Net Core 2.0 project was added Microsoft.AspNetCore.TestHost package "2.1.0-preview2-final". The fix was to install the stable version "2.0.2"
Upvotes: 0
Reputation: 5386
I solved this problem installing System.Net.Http (version 4.3.1) from NuGet.
Upvotes: 9
Reputation: 708
I feel it would be factually correct to answer my own question because 99% of the the answer is already there.
The development team at github/corefx acknowledged this issue resolution would be a side effect of another known issue fix by the nature of removing the hard reference to System.Diagnostics.DiagnosticSource.dll from System.Net.Http project.
Until then: any of two provided workarounds is OK to use based on personal preferences.
Upvotes: 4