Reputation: 1446
I'm porting a Net Framework 4 dll to Net Core. When porting my unit tests project I get an exception running some specific tests (not all).
System.IO.FileLoadException: Could not load file or assembly 'System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
This is the project.json for my dll
{
"version": "1.0.0-*",
"dependencies": {
"log4net": "2.0.7",
"NETStandard.Library": "1.6.1",
"Newtonsoft.Json": "9.0.1",
"StackExchange.Redis": "1.2.1"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}
And this is Packages.config for the unit tests project
<packages>
<package id="Castle.Core" version="4.0.0" targetFramework="net462" />
<package id="log4net" version="2.0.7" targetFramework="net462" />
<package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net462" />
<package id="Moq" version="4.7.1" targetFramework="net462" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
<package id="StackExchange.Redis" version="1.2.1" targetFramework="net462" />
<package id="System.Diagnostics.DiagnosticSource" version="4.0.0" targetFramework="net462" />
<package id="System.IO" version="4.1.0" targetFramework="net462" />
<package id="System.IO.FileSystem" version="4.0.1" targetFramework="net462" />
<package id="System.IO.FileSystem.Primitives" version="4.0.1" targetFramework="net462" />
<package id="System.IO.FileSystem.Watcher" version="4.0.0" targetFramework="net462" />
<package id="System.Linq" version="4.1.0" targetFramework="net462" />
<package id="System.Net.Http" version="4.1.1" targetFramework="net462" />
<package id="System.Net.NameResolution" version="4.0.0" targetFramework="net462" />
<package id="System.Runtime" version="4.1.0" targetFramework="net462" />
<package id="System.Runtime.Extensions" version="4.1.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Algorithms" version="4.2.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Encoding" version="4.0.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Primitives" version="4.0.0" targetFramework="net462" />
<package id="System.Security.Cryptography.X509Certificates" version="4.1.0" targetFramework="net462" />
<package id="System.Text.RegularExpressions" version="4.1.0" targetFramework="net462" />
<package id="System.Threading.Thread" version="4.0.0" targetFramework="net462" />
</packages>
Upvotes: 46
Views: 54200
Reputation: 1828
Go to the app.config and remove all the lines there that reference System.Net.Http.
E.g. delete if you have something like
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />
</dependentAssembly>
Upvotes: 15
Reputation: 8386
This problem really drives me nuts! It' been years since it was first reported, but seems that it doesn't ever make the cut. I recently hit this snag while working on a solution in Visual Studio 2022.
The good news is, the workarounds mentioned in the Githut threads actually work. For more background info, this is a good starting place: ["Could not load System.Net.Http, Version=4.x.y.z"][1]
The solution is truly simple, all you need to do is add binding redirects. A couple of caveats:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
<bindingRedirect oldVersion="0.0.0.0-4.6.26011.1" newVersion="4.2.0.0" />
</dependentAssembly>
</runtime>
</configuration>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
Upvotes: 0
Reputation: 2463
I had that same issue referencing System.Net.Http version 4.2.0.0 in a .NET Framework 4.8 project.
Reading the Exception info carefully, I noticed that there was an entry named "FusionLog".
It stated there was a version redirection in the binding of System.Http.Net in my App.config file.
In App.config I found an XML-section like:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Removing that whole assemblyBinding section did the trick.
Upvotes: 5
Reputation: 251
I tried out various solutions (removing the dependentAssembly OR specifying the binding redirect as well). None of them worked.
However, the only solution which worked for me was to explicitly set Specific Version for System.Net.Http (or whatever DLL giving you version issues) to False from Visual Studio.
Upvotes: 0
Reputation: 256
And now the junior programmer solution.... double check that you are making the updates suggested by Jawen and Jean in Nuget Package Manager in the correct places too. Remember that you might have a solution with your project and a test project, and so double check to update both sets of References.
Upvotes: 2
Reputation: 576
The best and easiest way to fix this issue, is with a binding redirect.
Simply specify the oldVersion as 0.0.0.0-5.0.0.0, and newVersion as 4.1.1.0
Where 4.1.1.0 is you version, for example.
Upvotes: 4
Reputation: 5101
I got the issue, and realized that it was because I had two different references. one reference was from my project library, and the second one was a dependency of a .Net Standard library, and therefore a Nuget package. The steps to solve were the following:
System.Net.Http
(project => add reference => remove the reference).Update-Package –reinstall System.Net.Http
to bring back the reference.Now it works again. :)
Upvotes: 31
Reputation: 883
My problem was that my service had a referenced assembly that had a reference to a newer version of System.Net.Http. I've resolved the issue by updating System.Net.Http in the service.
Upvotes: 5
Reputation: 690
I had this problem, while I had 10 projects depending on each other. I fixed that by adding the version that it asked for in one of the projects that was dependent on. It was not needed for compilation, but it seems that adding it, fixed the version in other projects while restoring. So it was:
Could not load file or assembly 'System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Then:
Could not load file or assembly 'System.Net.Http, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
So I added "System.Net.Http": "4.1.1", in one project..
That actually fixed the problem while it restored 8 projects.
Upvotes: 2