无法加载文件或程序集'Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'


233

我遇到错误

System.IO.FileLoadException:无法加载文件或程序集“ Newtonsoft.Json,版本= 4.5.0.0,区域性=中性,PublicKeyToken = 30ad4fe6b2a6aeed”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)

对于我的CI构建

我尝试过的解决方案

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

它也没有用


该错误意味着.NET无法找到Json.NET库。你有安装吗?
TypeIA 2014年

22
完全一样的问题-让我发疯。让我知道您是否找到解决方案
Dean Chalk 2014年

实际上,对我来说,添加您尝试过的内容可以解决问题。
h.alex 2015年

使用NuGet软件包管理器中的合并选项可确保版本不会分开。
niico

这是唯一对我有用的
RichC

Answers:


237

在包管理器控制台中执行:Update-Package –reinstall Newtonsoft.Json

更新

我最初将其发布为评论,但正如@OwenBlacker建议的那样,我将其放在此处:

如果这样做之后仍然出现错误,那么最终对我有用的是我<dependentAssembly>.config文件中删除了Json.Net的部分。如果不存在,重新安装会将其恢复,显然您需要删除它。除非在包装本身中提供正常的解决方案,否则恐怕必须手动执行此步骤。

注意:在执行此操作之前,请先阅读以下注释。

根据下面René的评论,请注意,答案中张贴的命令将在解决方案中的每个项目中重新安装该软件包。因此,如果您在多个项目中使用Newtonsoft.Json包,并且可能使用不同的版本,则仅执行上面的命令可能会带来不良后果。


7
为了大家阅读:我已经做到了,但仍然出现错误。然后我以某种方式解决了它:令人惊讶的是,我不得不从文件中删除 Json.Net的<dependentAssembly>部分.config。如果不存在,重新安装会将其恢复,显然您需要删除它。除非在包装本身中提供正常解决方案,否则恐怕必须手动执行此步骤。
Ofer Zelig 2014年

@OferZelig您应该将其作为一个单独的答案发布,这样它才能获得好评(更重要的是,引起更多关注)。尤其是因为它也对我
有用

@OwenBlacker谢谢。但是因为已经有了很多答案,我的将会迷路。这个答案非常好,只是如果它不起作用,那么我的评论就会“完成”它。你知道吗?我想我只会编辑原始答案。比获得自己的代表更重要。
Ofer Zelig 2014年

43
请注意,答案中张贴的命令将在解决方案中的每个项目中重新安装该软件包。因此,如果您在多个项目中使用Newtonsoft.Json包,并且可能使用不同的版本,则仅执行上面的命令可能会带来不良后果。
勒内·

解决了!对我来说,我在一个项目中安装了v6,通过从包管理器重新安装将其升级到v7。
jv-dev

123

对于每个使用Newtonsoft.Json v4.5版本有问题的人,请尝试在web.config或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>

重要信息:检查configuration配置文件的标签是否没有名称空间属性(如https://stackoverflow.com/a/12011221/150370中所建议)。否则,assemblyBinding标签将被忽略。


3
对我来说,在应用此答案后,在清理后手动删除bin文件夹的内容(不会清空它)就可以解决问题。
米凯尔·梅耶

非常感谢!:)
Kamron K.

很棒!从7/4/15开始,Newtonsoft.Json的当前版本为7.0.0,因此newVersion="6.0.0.0"必须更改为newVersion="7.0.0.0"您使用的版本或任何版本
Moses Machua 2015年

3
关于命名空间的说明...我可以拥抱你。我为此花了几个小时,却不知道绑定重定向因此而被忽略了。
布赖恩

1
关于名称空间的注释是如此重要,以至于它本身可能是一个答案。非常感谢你。
beawolf

42

关键是在配置文件中引用正确的版本。

脚步;

1-在项目引用属性中查看Newtonsoft.Json.dll的版本是什么,包文件夹中的版本是什么(例如,我的是7.0.1,引用的版本是7.0.0.0)

2-查看项目对您的期望(我的是6.0.0.0)

3-将依赖程序集添加到您的配置文件中。

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

对不起,您的观点只能投一票(例如,我的是7.0.1,参考版本是7.0.0.0),这有很大的不同。我会给更多的.....谢谢:)
Zaker

这对我有用。我将版本更新为7,但实际上是在运行版本8,所以我只是将newVersion更改为8.0,谢谢!
基思

即使安装了8.0.3(如在nuget软件包管理器中所说的那样),引用下的.dll仍然是8.0.0。所以我在我的web.config中更改为8.0.0.0。当我昨天发布所有内容时,请问这是怎么工作的,今天早上它不再起作用。
CularBytes

24

我对这里介绍的任何解决方案都没有运气(卸载,重新安装,删除引用,创建bindingRedirects等),我不得不回到旧版本的Newtonsoft。版本5.0.6以前一直在工作,所以我尝试了那个版本。我必须在程序包控制台中输入以下两个命令:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

-force必须使用第一个命令中的选项才能强制卸载。与其他程序集的依赖性会阻止没有该程序集的卸载。


像魅力一样工作。在我的MVC 4项目中出现错误。几乎切换到本机串行器。
Kees C. Bakker,2015年

谢谢,我只需要将-version“ 5.0.6”更改为-pre:install-package newtonsoft.json -pre
thiago.adriano26 2015年

22

我解决了将此绑定重定向添加到我的.config文件的问题:

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

错误消息抱怨找不到4.5.0.0版本,Newtonsoft.Json的当前版本是6.0.0.0,因此重定向应该从4.5转到6.0,而不是相反


是的,这解决了我的问题。如此奇怪的是JSON.NET导致的问题数量..但是一旦它成为梦dream以求的机器。感谢+1
Piotr Kula 2016年

您的代码片段使我意识到缺少'assemblyBinding'元素。谢谢
里加

21

我认为您指向的目标错误,请将其更改为4.5而不是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>

这应该工作。


1
Umbraco 7需要4.5.0.0,因此这有助于使其正常运行
MagicalArmchair

19

我花了几天的时间来解决这个令人沮丧的问题。我已经尝试了几乎可以在网上找到的所有内容。最终,我发现此错误可能是由一个解决方案中的目标.Net项目版本不同(4.5和4.5.1)引起的(如我的情况)。下面的步骤为我修复了它:

  1. 仔细检查解决方案中每个项目的.Net版本。只需右键单击项目并转到Properties

在此处输入图片说明

  1. 如果可能,请为所有项目设置相同的.Net版本。如果不是,至少尝试更改一个Startup项目(对我而言,这是导致问题的原因)。

  2. Newtonsoft.Json从溶液中取出所有包装。

    uninstall-package newtonsoft.json -force

  3. 像这样更新所有文件中的 所有Newtonsoft.Json版本packages.config

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

  4. 使用以下命令Newtonsoft.Json从“ Package Manager控制台” 重新安装:

    install-package newtonsoft.json

  5. 重建解决方案

(可选)7.如果您更改了启动项目,请再次将其返回


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

为我做了把戏:)


1
这也对我有用。它会自动将webconfig文件更新为正确的版本。
沙基尔

我也是,这确实有所帮助。
Mike Malter

11

如果您在同一解决方案和另一个库中使用多个项目,请检查所有项目是否具有相同版本的Newtonsoft.Json


这是我的问题。非常沮丧地经历了上面的所有响应,但没有结果。终于在我检查Build文件夹中的.dll版本时弄清楚了。

10

从项目参考中删除Newtonsoft.Json程序集,然后再次添加它。您可能是偶然删除或替换了dll。


这种方法适用于Xamarin Forms iOS项目,在该项目中我放下了NuGet包并重新添加了它。谢谢。
参议员

9

我正在编写一个WebApi REST服务客户端,因此对我来说,此错误是由于应该通过NuGet将包添加到手动通过Add Reference 将引用添加到System.Net.HttpSystem.Net.Http.Formatting程序集而引起的。另请参阅此答案的另一个问题Microsoft.AspNet.WebApi.Client


8

您的解决方案中有2个不同版本的JSON.NET库。为了解决这个问题,您应该将它们升级到最新版本。跟着这些步骤:

1-打开解决方案资源管理器2-右键单击解决方案名称3-选择管理解决方案的Nuget程序包4-从菜单中选择更新5-更新JSON.NET程序包

这样可以解决您的问题。

链接: 无法加载文件或程序集“ Newtonsoft.Json,版本= 7.0.0.0,区域性=中性,PublicKeyToken = 30ad4fe6b2a6aeed”或其依赖项之一


解决此问题的最简单,最安全的方法。谢谢@mohammad
deanwilliammills

7

将正确的版本部署到CI机器

这是在告诉您程序集加载器找到了另一个版本的Newtonsoft.Json程序集,该版本与您在项目中创建的引用不匹配。为了正确加载程序集,您必须与已编译的代码并排部署程序集,或者在目标计算机(即GAC)中安装正确版本的程序集。

替代方法:确保配置在正确的文件中

如果要保留当前解决方案,并使用其他版本加载部件,请确保发布的配置位于正确的.config文件中。请记住,没有xpto.dll.config,由应用程序加载的DLL始终使用正在运行的应用程序的配置文件。



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>

对我有用....只需将您正在使用的版本放在newVersion即(newVersion =“ 7.0.0.0”)


之前有这个问题,一经解决就解决了。非常感谢你。
GutierrezDev

5

封闭的解决方案。

打开packages.config*.csproj使用文本编辑器删除所有具有Newtonsoft.Json的行

例如:
<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>

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

再次打开解决方案,然后重新安装Newtonsoft.Json Install-Package Newtonsoft.Json

它对我有用。


它有时会起作用,但是在即将到来的版本中,这个问题又再次出现了
Heemanshu Bhalla

没问题,如果不更新它哈哈。创建垃圾项目并安装Newtonsoft.Json.dll,将其复制(文件dll)并添加到您的项目参考中。
张庭选富国庆

4

我们遇到了与您提到的完全相同的问题。我们正在使用nunit通过CI运行测试,并且nunit运行一个名为tests.nunit的文件,该文件描述了要运行的测试dll固定装置的列表。

每个测试装置都有其自己的配置文件,但是在运行“ tests.nunit”文件时,绑定重定向似乎被忽略了。解决方案是将绑定重定向添加到“ tests.nunit”文件旁边的新配置文件“ tests.config”。


你能详细说明吗?
KirstieBallance

4

我遇到了相同类型的问题。我还通过以下操作解决了该问题:转到“ 工具” >“ NuGet软件包管理器”,然后选择“ 软件包管理器控制台”。最后,执行以下两个命令:)

  1. 卸载软件包newtonsoft.json -force
  2. 安装软件包newtonsoft.json

4

您应该更新服务器中的web.config文件。当nuget安装NewtonSoft时,更新包含此代码的文件

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


就我而言,这正是我的解决方案,将其放入app.config中。“可以在应用程序,发布者策略或计算机配置文件中重定向程序集版本。”
datps


3

我犯了为.Net 4.5添加NewtonSoft .dll文件的错误。

我的主要项目 4.5,但是当我向解决方案中添加一个额外的项目时,却奇怪地将其添加为.Net 2.0项目...而当我尝试与此同时使用NewtonSoft的4.5 dll时,我得到了这个“ Newtonsoft.Json找不到”错误。

解决方案(当然)是将这个新项目从.Net 2.0更改为4.5。


3

在我的情况下,主要项目仍然引用的是Newtonsoft.Json的旧版本,该项目不再存在(以黄色感叹号显示)。删除引用解决了该问题,不需要bindingRedirect。


3

我在7.0.0.0版中遇到了完全相同的问题,导致我的问题的库是Microsoft.Rest.ClientRuntime,尽管在nugget中进行了正确的依赖管理,正确版本的newtonsoft.json(7.0.0.0)已安装)。

我通过在配置文件中将上述从6.0.0.0重定向到7.0.0.0(来自Kadir Can)的方法解决了这一问题:

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

---->几天后,没有进行任何更改,再次出现相同的错误。我安装了6.0.0.0版,将n更新为7.0.0.0,现在可以正常使用了。


为我工作。已安装版本Newtonsoft Json 7.0.1(测试版),但是生成的配置指向6.0.0.0,这是不正确的。谢谢!
Dhanuka777

2

就我而言,在下载程序集并将引用添加到项目之后,我通过在将引用添加到项目之前“解除阻止” DLL来解决了这个问题。

使用Windows资源管理器,浏览至DLL位置,右键单击DLL,然后选择“属性”。您会在其中一个选项卡上找到一个“取消阻止”按钮,然后可以添加引用,程序集将正确加载。



2

右键单击您的项目,选择管理Nuget软件包,在搜索框中键入newtonsoft并安装最新版本。然后运行您的应用


2

我面临着同样的错误,并为之奋斗了数小时。我有一个Web API项目,该项目正在使用Newtonsoft.json和另一个UnitTest项目,用于该Web API项目。单元测试项目还需要Newtonsoft.json参考。但是在添加链接时,我遇到了以上异常。

我最终通过在单元测试项目的app.config中添加以下代码片段来解决了该问题:

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

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

在仍然使用旧版本的WebAPI的同时升级Nestwonsoft.Json时,我遇到了同样的问题,并且此问题得以解决。谢谢!
Gavin.Paolucci.Kleinow 2015年

2

另一个棘手的问题是,如果该元素在任何其他dependentAssembly元素上配置不正确,则绑定重定向似乎只会无声地失败。

确保每个元素下面只有一个元素。

在某些情况下,VS会生成以下内容:

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

代替

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

花了我很长时间才意识到这是问题所在!


2

在下面的部分中添加到您的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>

2

如果错误在本地消失并且仍然出现在服务器上,则与我配合使用的解决方案是删除bin文件夹和packages.config和web.config并重新上传这些文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.