267

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

5

46 Answers 46

259

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.

12
  • 9
    For the sake of everyone reading this: I've done that and still got the error. Then I solved it somehow: Amazingly, I had to delete 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.
    – Ofer Zelig
    Jun 27, 2014 at 0:36
  • @OferZelig You should post that as a separate answer, so it can get the upvotes (and, more importantly, increased attention). Not least because it worked for me too :) Jul 3, 2014 at 0:04
  • @OwenBlacker thanks. But because there are lots of answers already, mine will get lost. And this answer is quite good, it's just that if it doesn't work then my comment "completes" it. You know what? I guess I'll just edit the original answer. More important than gaining own rep.
    – Ofer Zelig
    Jul 4, 2014 at 0:04
  • 51
    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.
    – René
    Jul 10, 2014 at 11:09
  • Solved! For me, I had v6 installed in one project, reinstalling from package manager brought it up to v7.
    – jv-dev
    Jul 20, 2015 at 19:13
137

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.

6
  • 3
    for me, deleting the content of the bin folder manually after cleaning (which does not empty it) did the trick after I applied this answer. Oct 2, 2014 at 8:27
  • Works great! As of 7/4/15 the current version of Newtonsoft.Json is 7.0.0 so newVersion="6.0.0.0" must be changed to newVersion="7.0.0.0" or whatever version you are using Jul 4, 2015 at 4:26
  • I had a similar problem with DNN and the newtonsoft.json.dll, where DNN used version 4.5 and my module wanted to use 7.0. I didn't have access to upgrade the dnn installation with 7.0, so I added one of these dependentAssembly entries using oldversion= 0.0-7.0 and the 'new' version as the old 4.5. It worked. Aug 6, 2015 at 17:44
  • 3
    That note on the namespace...I could hug you. I burned hours on this not knowing the binding redirects were being ignored because of that.
    – Brian
    Nov 10, 2016 at 14:55
  • 1
    The note about the namespace is so important that it could be an answer by its own. Thank you very much.
    – MÇT
    Nov 27, 2019 at 7:47
52

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>
4
  • Sorry can give only one vote your point (For example mine is 7.0.1 and the referance Version is 7.0.0.0) made a huge difference. I would have given more.....Thanks :)
    – Zaker
    Dec 8, 2015 at 7:43
  • This worked for me. I updated the version to 7, but it was really running version 8 so I just changed the newVersion to 8.0, thanks!
    – Keith
    Mar 9, 2016 at 13:12
  • Even though installing 8.0.3 (like it says in nuget package manager), the .dll under references is still 8.0.0. So I changed to 8.0.0.0 in my web.config. Wierd how this worked yesterday when I published everything and this morning it does not work anymore.
    – CularBytes
    Apr 25, 2016 at 7:39
  • How do you find the reference version? Using 12.0.3.0 in the redirect doesn't work but 12.0.0.0 does. Without pure fluke, how would I have worked that out? Is it detailed somewhere? It was unable to find 12.0.3.0 which exists in the bin folder, but it can find 12.0.0.0 apparently which literally doesn't exist as a versioned assembly ha!
    – Murphybro2
    Mar 5, 2021 at 14:29
27

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.

2
  • Worked like a charm. Had the error in my MVC 4 project. Almost switched to the native serializer. May 31, 2015 at 19:41
  • thanks, I just needed to change -version "5.0.6" to -pre: install-package newtonsoft.json -pre Oct 24, 2015 at 12:21
25

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

2
  • Yes this solved my problem. So strange the amount of issues JSON.NET causes.. but once it goes its a dream machine. Thanks +1
    – Piotr Kula
    Jul 21, 2016 at 20:27
  • Your code snippet made me realize was missing 'assemblyBinding' element. Thanks Feb 22, 2017 at 6:32
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.

1
  • 1
    Umbraco 7 required 4.5.0.0, so this helped get it up and running Jan 13, 2015 at 16:53
22

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

15
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

Did the trick for me :)

3
  • 1
    this did the trick for me too. it automatically updated the webconfig file to the correct version.
    – Shaakir
    Jul 19, 2016 at 9:48
  • Me too, this really helped. Oct 17, 2017 at 23:04
  • Other answers didn't work for me but this! It automatically updated both web.config and packages.config, thanks :)
    – jet_choong
    Nov 25, 2021 at 12:52
13

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

1
  • This was my issue. Very frustrating going through all the responses above and getting no results. Finally figured it out when I bothered to check the version of the .dll in my Build folder.
    – user2836056
    Mar 22, 2018 at 17:24
11

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

1
  • This approached works against a Xamarin Forms iOS project where I dropped the NuGet package and re-added it. Thanks. Nov 30, 2016 at 12:17
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.

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

1
  • The easiest and safest way to fix this problem. Thanks @mohammad Jun 26, 2018 at 13:32
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.

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

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")

1
  • Had this problem some times ago and this fixed in one hit. Thank you very much. Sep 14, 2016 at 18:40
5

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>
1
  • Should add </runtime> at the last line
    – Harun
    Jan 4, 2021 at 5:05
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.

2
  • it works sometime but in the upcoming builds this problem came again n again Aug 12, 2016 at 6:47
  • No problem if don't update it haha. Create trash project and install Newtonsoft.Json.dll, copy it (file dll) and add to your project reference. Sep 24, 2016 at 6:51
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.

1
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
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>

1
  • In my case that was exactly my solution, put into app.config. "Assembly versions can be redirected in application, publisher policy, or machine configuration files."
    – datps
    Aug 2, 2016 at 6:01
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

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.

3

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>
2
  • <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> May 18, 2015 at 13:06
  • I was having this same problem when I upgraded Nestwonsoft.Json while still using and old version of WebAPI, and this solved it. Thanks! Jun 17, 2015 at 14:50
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.

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.

1
  • Worked for me. Installed version Newtonsoft Json 7.0.1 (beta), but the config generated was pointing to 6.0.0.0 which was not correct. Thanks!
    – Dhanuka777
    Nov 5, 2015 at 2:36
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);
2
  • 1
    I have found that instead of calling the JsonConvert.DeserializeObject<MyObject>() directly, you can add the Microsoft.AspNet.WebApi.Client package from NuGet to get the updated version of System.Net.Http.Formatting. This will allow you to use the response.Content.ReadAsAsync<MyObject>() call and let Json.Net work behind the scenes.
    – Brian Behm
    Dec 15, 2015 at 21:18
  • Bioupy, your suggession worked for me. In my project we use Newtonsoft.Json version=9.0.0.0 (as a NuGet package) and Microsoft.AspNet.WebApi.Client version=5.2.3 (also as NuGet). It seems that the System.Net.Http.Formatting.dll has a strict version reference to Newtonsoft.Json.dll of version=6.0.0.0. So it tried to load version 6.0.0.0, but I couldn't put 2 Newtonsoft.Json assemblies of 2 different versions in my application target folder. So reading the response as string and deserializing it with JsonConvert.DeserializeObject resolved my case.
    – VitaliG
    Apr 12, 2017 at 10:38
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.

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

2

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

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!

0

Not the answer you're looking for? Browse other questions tagged or ask your own question.