Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'

243

I am getting the Error

System.IO.FileLoadException : Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

for my CI build

Solution which I tried

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
        culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

It also did not work

asp.net
json.net
asked on Stack Overflow Mar 19, 2014 by user3437755 • edited Jul 2, 2014 by Owen Blacker

44 Answers

247

In package manager console execute: Update-Package –reinstall Newtonsoft.Json.

UPDATE

I originally posted this as a comment but as @OwenBlacker suggested I'll just put it here:

If you still get an error after doing this, then what worked for me eventually is that I deleted Json.Net's <dependentAssembly> section from my .config file. Reinstall brings it back if it's not there and apparently you need to delete it. Until there will be a normal solution in the package itself, I'm afraid this manual step is a must.

Note: Please read the comments below before doing this.

As per René's comment below BE AWARE that the command posted in the answer will reinstall the package in every project in your solution. So if you use the Newtonsoft.Json package in several projects and maybe use different versions, just executing the above command might have unwanted consequences.

answered on Stack Overflow Apr 30, 2014 by bobah75 • edited May 19, 2016 by s_a
128

To everyone having problems with Newtonsoft.Json v4.5 version try using this in web.config or app.config:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
           <assemblyIdentity name="Newtonsoft.Json"
               publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
           <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
       </dependentAssembly>
    </assemblyBinding>
</runtime>

IMPORTANT: Check that the configuration tag of your config file has no namespace attribute (as suggested in https://stackoverflow.com/a/12011221/150370). Otherwise, assemblyBinding tags will be ignored.

answered on Stack Overflow Jun 27, 2014 by ZeroDotNet • edited May 23, 2017 by Community
44

The key point is referencing right version in your config file.

Steps;

1- look at what is the version of your Newtonsoft.Json.dll in the project reference property what ever the version in your package folder (For example mine is 7.0.1 and the reference Version is 7.0.0.0)

2- look at what the project expect from you in the exception (mine is 6.0.0.0)

3- Add dependent assembly to your config file as it should be..

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"  publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
  </dependentAssembly>
answered on Stack Overflow Jul 14, 2015 by Kadir Can • edited Apr 4, 2018 by Kadir Can
24

I had no luck with any of the solutions presented here (uninstalling, reinstalling, deleting references, creating bindingRedirects etc.) I had to go back to an old version of Newtonsoft. Version 5.0.6 had been working before, so I tried that one. I had to enter these two commands in the Package Console:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

The -force option in the first command is required to force the uninstall. Dependencies with other assemblies prevent the uninstall without it.

answered on Stack Overflow Sep 20, 2014 by Karl Hoaglund • edited Sep 20, 2014 by Lucas Zamboulis
23

I fixed the problem adding this binding redirect to my .config file:

<runtime>
    . . . 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
                culture="neutral" />
            <bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

The error message complains about not finding version 4.5.0.0, the current version of Newtonsoft.Json is 6.0.0.0 so the redirect should go from 4.5 to 6.0, not viceversa

answered on Stack Overflow Nov 19, 2014 by MiMo
22

I think you are pointing to the wrong target, change it to 4.5 instead of 6.0

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
        culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

This should work.

answered on Stack Overflow Apr 10, 2014 by BrunoLM • edited Jul 3, 2014 by Owen Blacker
21

I've spend couple of days trying to resolve this frustrating issue. I've tried pretty much everything that can be found on the web. Finally I found that this error could be caused (like in my case) by the different target .Net project versions (4.5 and 4.5.1) in one solution. The steps bellow fixed it for me:

  1. Double check the .Net version of every project that's in your solution. Just right click on project and go to Properties.

enter image description here

  1. If possible set the same .Net version for all projects. If not at least try to change the Startup project one (for me this was the one causing the issues).

  2. Remove all Newtonsoft.Json packs from the solution.

    uninstall-package newtonsoft.json -force

  3. Update all Newtonsoft.Json versions in all packages.config files, like so

    <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />

  4. Reinstall Newtonsoft.Json from "Package Manager Console" with:

    install-package newtonsoft.json

  5. Rebuild the solution

(Optional) 7. If you changed the Startup project, return it again

answered on Stack Overflow Aug 14, 2015 by ekostadinov • edited Feb 14, 2016 by ekostadinov
14
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

Did the trick for me :)

answered on Stack Overflow Mar 27, 2015 by Chiranjeeb • edited Jan 25, 2016 by Druid
12

if you using multiple project in same solution and library of the one other check is all projects has same version of Newtonsoft.Json

answered on Stack Overflow Jun 25, 2016 by Fatih
11

Remove the Newtonsoft.Json assembly from the project reference and add it again. You probably deleted or replaced the dll by accident.

answered on Stack Overflow Mar 19, 2014 by helb
9

I was writing a WebApi REST service client, so for me this error was caused by adding References to the System.Net.Http and System.Net.Http.Formatting assemblies manually via Add Reference, when I should have added the Microsoft.AspNet.WebApi.Client package via NuGet. See also this answer to another question.

answered on Stack Overflow Jun 24, 2015 by mschwaig • edited May 23, 2017 by Community
8

You have 2 different versions of JSON.NET library in your solution. To solve this you should upgrade them to latest version. Follow these steps:

1-Open solution explorer 2-Right Click on solution name 3-Select Manage Nuget Packages for Solution 4-Select Updates from menu 5-Update JSON.NET package

This will resolve your issue.

link: Could not load file or assembly 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies

answered on Stack Overflow Mar 16, 2017 by mohammad
7

Deploy the correct version to the CI machine

This is telling you that the assembly loader found a different version of the Newtonsoft.Json assembly, that does not match the reference you created in your project. To load the assembly correctly, you must either deploy the assembly side by side with your compiled code, or install the correct version of the assembly in the destination machine (i.e. in the GAC).

Alternative: make sure the configuration is in the correct file

If you want to keep the current solution, and load an assembly with a different version, make sure that the configuration you posted is in the correct .config file. Remember that there is no xpto.dll.config, a DLL loaded by an application always uses the config file of the running application.

answered on Stack Overflow Mar 19, 2014 by Miguel Angelo • edited Mar 19, 2014 by Miguel Angelo
6

Normally adding the binding redirect should solve this problem, but it was not working for me. After a few hours of banging my head against the wall, I realized that there was an xmlns attribute causing problems in my web.config. After removing the xmlns attribute from the configuration node in Web.config, the binding redirects worked as expected.

http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx

answered on Stack Overflow Oct 3, 2014 by David Paquette
5
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"
        publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>

Works for me.... just put the version you are using in newVersion i.e(newVersion="7.0.0.0")

answered on Stack Overflow Dec 27, 2015 by ali • edited Jan 25, 2016 by Druid
5

Close solution.

Open packages.config and *.csproj with text editor and delete any line have Newtonsoft.Json

Ex:
<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference>

Or <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />

Open solution again and re-install Newtonsoft.Json by Install-Package Newtonsoft.Json

It work for me.

answered on Stack Overflow Jul 2, 2016 by Trương Quốc Khánh • edited Nov 22, 2017 by Trương Quốc Khánh
4

We had the exact same issue that you mentioned. We're using nunit to run tests through CI, and we have nunit running a file called tests.nunit, which describe a list of test dll fixtures to run.

Each test fixture had their own config file, but when run through the "tests.nunit" file the binding redirects seem to be ignored. The solution was to add the binding redirects to a new config file, "tests.config" that was beside the "tests.nunit" file.

answered on Stack Overflow Apr 14, 2014 by declyne
4

You should update the web.config file in the server. When nuget install NewtonSoft update this file including this code

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

answered on Stack Overflow Jun 11, 2014 by oaamados • edited Nov 4, 2015 by (unknown user)
4

I have got the same type of problem. And I also solved it just doing the following: Go to TOOLS > NuGet Package Manager and Select Package Manager Console. Finally, execute the following two commands :)

  1. uninstall-package newtonsoft.json -force
  2. install-package newtonsoft.json
answered on Stack Overflow Mar 4, 2015 by Masud Shrabon
4

Just check the version of Newtonsoft.Json Newtonsoft properties

Then you need to add that version in your web config (in my case 8.0.0.0) Web config

4

I was getting same error and by adding below code error resolved on production.

Answer is too late but might help someone.

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
answered on Stack Overflow Nov 28, 2019 by Bharat • edited Jan 4, 2021 by Harun
3

I made the mistake of adding a NewtonSoft .dll file for .Net 4.5.

My main project was 4.5, but when I added an extra project to my solution, it strangely added it as a .Net 2.0 project... and when I attempted to use NewtonSoft's 4.5 dll with this, I got this "Newtonsoft.Json couldn't be found" error.

The solution (of course) was to change this new project from .Net 2.0 to 4.5.

answered on Stack Overflow Jul 29, 2014 by Mike Gledhill
3

In my case, the main project was still referencing an old version of Newtonsoft.Json which didn't exists in the project any more (shown by a yellow exclamation mark). Removing the reference solved the problem, no bindingRedirect was necessary.

answered on Stack Overflow Jul 27, 2015 by IngoB
3

I had the exact same problem with version 7.0.0.0, and the lib causing my problem was Microsoft.Rest.ClientRuntime which somehow was referring to the wrong version (6.0.0.0) of Newtonsoft.json, despite the right dependency management in nugget (the right version of newtonsoft.json (7.0.0.0) was installed).

I solved this by applying the redirection above from 6.0.0.0 to 7.0.0.0 (from Kadir Can) in the config file:

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />

----> After a few days without changing anything it came up again with the same error. I installed version 6.0.0.0 n updated it to 7.0.0.0 it works fine now.

answered on Stack Overflow Oct 12, 2015 by lazizanie • edited Oct 26, 2015 by lazizanie
3

Reinstall newtonsoft package through nuget did not worked for me. I had to manually call JsonConvert.DeserializeObject to bypass this issue

I changed

HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
MyObject data = await response.Content.ReadAsAsync<MyObject>();

For

HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
string jsonStr = await response.Content.ReadAsStringAsync();
MyObject data = JsonConvert.DeserializeObject<MyObject>(jsonStr);
answered on Stack Overflow Nov 27, 2015 by Bioupy
2

In my case, after downloading the assembly and adding the reference to the project, I solved this by 'unblocking' the DLL before adding the reference to the project.

Using Windows explorer, browse to the DLL location, right-click on the DLL and then select 'properties'. You'll find an 'unblock' button on one of the tabs and then you can add the reference and the assembly will load correctly.

answered on Stack Overflow Apr 10, 2014 by VorTechS
2

Nothing from above helped me, but what actually fixed it is the following:

  1. Remove all dependency bindings in app.config (from all app.config files in the solution)
  2. Execute the following command from "Package Manager Console"

Get-Project -All | Add-BindingRedirect

  1. Rebuild

Reference: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx

answered on Stack Overflow Jan 27, 2015 by valentinvs • edited Jan 27, 2015 by valentinvs
2

Right click your project select manage Nuget packages, type newtonsoft in the search box and install the latest version. Then Run your App

answered on Stack Overflow May 7, 2015 by uche Godfrey
2

I was facing the same error and struggled with it for hours. I had a web API project which is using Newtonsoft.json and another UnitTest project for the web API project. The unit test project also needed the Newtonsoft.json reference. But on adding the link I was getting the above exception.

I finally resolved it by adding the below code snippet in the app.config of the unit test project:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
answered on Stack Overflow May 18, 2015 by mukulsharma1146 • edited May 18, 2015 by Brian
2

Another insidious problem is that it appears that binding redirects can just silently fail if the element has an incorrect configuration on any other dependentAssembly elements.

Ensure that you only have one element under each element.

In some instances, VS generates this:

  <dependentAssembly>
    <assemblyIdentity ...
    <assemblyIdentity ...
  </dependentAssembly>

Instead of

  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>

Took me a long time to realise this was the problem!

answered on Stack Overflow Aug 18, 2015 by Daniel
2

Below section add in to your web.config

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
           <assemblyIdentity name="Newtonsoft.Json"
               publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
           <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
       </dependentAssembly>
    </assemblyBinding>
</runtime>
answered on Stack Overflow Sep 4, 2015 by Jaydeep Shil
2

If error disappears locally and still appears on server, the solution that works with me is to delete bin folder and packages.config and web.config and reupload these files

answered on Stack Overflow Sep 9, 2015 by Ahmad Alaa
1

The problem for me was a depreciated version of Newtonsoft.Json. Re-installing didn't help.

In Visual Studio, go to Tools->Manage NuGet Packages. Select Updates. Search for Newtonsoft. Click Update to install the latest version.

answered on Stack Overflow Jul 3, 2014 by spadelives
1

Also, in a CI environment with NuGet restore, be sure that you don't have partial folders checked into source control. By default, when adding folders to source control, it will automatically exclude assemblies. Besides, this defeats the whole purpose of restoring nuget packages upon build. Either checking assemblies, or not checking in any packages folders will get a successful build, but the better practice is to not check nuget packages into source control.

answered on Stack Overflow Jan 27, 2015 by JMiera
1

I solved this issue by installing the Nuget package: Microsoft ASP.NET Web API 2.2 Client Libraries. This in turn installed newtonsoft.json version 6.04

answered on Stack Overflow May 17, 2016 by JohnnyBT
1

One more advice to the open topic. The error appears after running the "Analyze": something was changed in the project settings. The problem was that in:

Project / Settings / Build / Platform target

appeared "Any CPU".

Setting back to x86 (or maybe x64 in your case) solved the issue.

answered on Stack Overflow Feb 9, 2018 by Badiboy
1

For a simplest solution you can set your project file to automatically generate binding redirects for you:

<PropertyGroup>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>

https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/how-to-enable-and-disable-automatic-binding-redirection

answered on Stack Overflow Dec 20, 2019 by Vedran • edited Sep 19, 2020 by Martijn Pieters
0

You can find the installed version of ur library from the properties inside references. For my case i had 8.0.0.0 installed. Error says Could not load file or assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies.

So i had to add the following manually inside web.config

  <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="6.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
      </dependentAssembly>
answered on Stack Overflow Jan 4, 2016 by Irshu
0

I've been struggling with it for a day or so too, tried every solution. What helped me was to check that capital letters in app.config. I had PublicKeyToken instead of publicKeyToken, after changing it suddenly worked.

answered on Stack Overflow Oct 5, 2016 by Igor Be
0

Apart from many answers here,I found something hence adding it.First point,Make sure the dll is not referenced from GAC.Apart from this,

While adding/changing dll of Newtonsoft.Json ,Sometimes *.csproj of the project doesnt get changed or the changed version of json dll will not be reflected in csproj of the solution.

So Open the project in notepad++ and search Newtonsoft.Json and rename the JSON from old version to New version explicitly.Now after tabbing back to VS ,the solution/project will reload with needed version Newtonsoft.JSON dll.

answered on Stack Overflow Jun 20, 2017 by Hameed Syed
0
updating web.config with the following assembly binding resolved the issue 
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">     
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
                culture="neutral" />
        <bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
answered on Stack Overflow Feb 27, 2018 by Subhamay
0

In my case I had folder name Newtonsoft.Json.6.0.7

enter image description here

but .csproj file had path though folder ...\Newtonsoft.Json.6.0.5\...

enter image description here

Changing .csproj file to have 6.0.7 fixed the problem.

answered on Stack Overflow Nov 27, 2018 by wha7ever
0

This is very old, seems still many people having issues with the same thing. So I would like to share my experience that it might help someone.

I had the same issue in two places. In one project users 6.0.4.0 and in different project use 4.5.0.0.

1- This work for me. In bin folder I have 6.0.0.0 Newtonsoft.Json.dll and symbolic link to 4.5.0.0 dlls

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<probing privatePath="bin\4.5dlls-path;" />
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" 
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

If you don't know how to create symbolic link here.

mklink /D "name of the folder" "Path to the dll"

2- In this case when I remove the secion from Web config file it worked. Remember I have reference to 6.0.0.0 and 4.5.0.0 in different projects. In symbolic link I had 12.0.1.0 dll and bin 6.0.0.0.

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<probing privatePath="bin\12.0.1dlls-path;" />
</dependentAssembly>
</assemblyBinding>
</runtime>

3- I have one more solution. If you have different versions of Newtonsoft.Json.dll in different projects try to upgrade all into one version or to the latest version, But in some case it might not work. Ex: System.Net.Http.Formatting.dll might need the version of Nettonsoft.Json.dll 6.0.0.0. In this case you need the vision 6.0.0.0, so try to make all into same version. Hope this might help some one.

answered on Stack Overflow Apr 16, 2020 by Kapila Perera
0

I had the same issue and I got the exception when I was trying to create MassTransit queues:

"Exception: System.TypeInitializationException: The type initializer for 'MassTransit.Serialization.JsonMessageSerializer' threw an exception. ---> System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)"

Solution that worked for me (after spending couple of days reverting several commits):

  • We had a windows service solution that has .Service project and .XUnitTests project. Both of them were using a common nuget that has dependency on Newtonsoft.Json.dll. There was no explicit reference to Newtonsoft.Json nuget package in both projects (but we were using 'using Newtonsoft.Json;' namespace in our classes), so the common nuget was using version 9 of Newtonsoft.Json by default.

  • As soon as I installed the Newtonsoft.Json nuget in both .Service and .XUnitTests projects, the common nuget package started using the latest v12 Newtonsoft and that fixed my issue.

Just posting it in here if it saves anyone their valuable time.

answered on Stack Overflow Jun 16, 2020 by sankar

User contributions licensed under CC BY-SA 3.0