Library version conflicts in .NET: System.Net.Http

1

I am trying to use NuGet Package Manager Console to deploy changes to the database. When I issue the Update-Database command, it fails with an error message saying:

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.

My projects targets .NET 4.5.2 which as far as I can tell, provides System.Net.Http in version 4.0.0.0. Thus, the incriminated library is not laid in the binary output directory. When I download the 4.1.1.1 version (NuGet package version 4.3.2) and copy it into the binary output directory, along with my DLLs, I get another error message:

Loading this assembly would produce a different grant set from other
  instances. (Exception from HRESULT: 0x80131401)

In both cases the exception is System.IO.FileLoadException and it is thrown in Microsoft.Rest.ServiceClient'1.CreateRootHandler(). I checked the source code of that function and it in fact references .NET 4.5 and System.Net.Http:

  protected static HttpClientHandler CreateRootHandler()
  {
    // Create our root handler
#if NET45
    return new WebRequestHandler();
#else
    return new HttpClientHandler();
#endif
  }

However, nowhere I can find the exact version number of System.Net.Http. Finally, I used ILSpy to inspect Microsoft.Rest.ClientRuntime and it seems to depend on System.Net.Http in version 4.0.0.0.

ILSpy inspection into Microsoft.Rest.ClientRuntime

I have also tried removing all references to System.Net.Http and installing the newest NuGet (4.3.2). That lead to subsequent errors with missing methods:

Method not found: 'Void Microsoft.Azure.KeyVault.KeyVaultClient..ctor(
  AuthenticationCallback, System.Net.Http.DelegatingHandler[])'.

and

Method not found: 'Void Microsoft.Rest.ServiceClient`1..ctor(
  System.Net.Http.DelegatingHandler[])'.

which I solved by copying the right DLL from the respective NuGet into the deployment directory. This finally leads back to:

Loading this assembly would produce a different grant set from other
  instances. (Exception from HRESULT: 0x80131401)

What am I missing?

.net
nuget
asked on Stack Overflow Nov 4, 2017 by Lukasz

1 Answer

1

After finding that Kunal's answer here:

MongoDB client throws a FileNotFoundException in mscorlib

worked for me, I tried changing the version number for System.Net.Http. I have the System.Net.Http version 4.3.3 installed targeting net462 and this worked for me:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
</dependentAssembly>
answered on Stack Overflow Jan 9, 2018 by gene

User contributions licensed under CC BY-SA 3.0