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

我得到错误

System.IO.FileLoadException:无法加载文件或程序集“Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其依赖项之一。 定位的程序集清单定义与程序集引用不匹配。 (来自HRESULT的exception:0x80131040)

为我的CI构build

我试过的解决scheme

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

它也没有工作

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

UPDATE

我最初发表这个评论,但@OwenBlackerbuild议我只是把它放在这里:

如果在执行此操作后仍然出现错误,那么最终我所做的工作就是从我的.config文件中删除了Json.Net的<dependentAssembly>节。 如果不存在,重新安装会将其恢复,显然您需要将其删除。 直到包装本身会有一个正常的解决scheme,恐怕这个手动步骤是必须的。

注意:在这之前请阅读下面的评论。

根据下面的René的评论BE AWARE ,在答案中发布的命令将在您的解决scheme中的每个项目中重新安装软件包。 因此,如果您在多个项目中使用Newtonsoft.Json软件包,并且可能使用不同的版本,只是执行上述命令可能会产生不必要的后果。

对于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文件的configuration标签是否没有命名空间属性(如https://stackoverflow.com/a/12011221/150370中的build议)。; 否则, assemblyBinding标签将被忽略。

这是唯一的解决scheme, 关键是在您的configuration文件中引用正确的版本。

脚步;

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

2 – 看看项目在exception情况下期待什么(我的是6.0.0.0)

3-将依赖程序集添加到您的configuration文件,因为它应该是..

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

我没有运气在这里介绍的任何解决scheme(卸载,重新安装,删除引用,创buildbindingRedirects等),我不得不回到旧版本的牛顿软件。 版本5.0.6以前一直在工作,所以我尝试了一个。 我不得不在包控制台中input这两个命令:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

第一个命令中的-force选项是强制卸载所必需的。 与其他程序集的依赖性会阻止没有它的卸载。

我解决了将这个绑定redirect添加到我的.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> 

错误消息抱怨没有find版本4.5.0.0,当前版本的Newtonsoft.Json是6.0.0.0所以redirect应该从4.5到6.0,而不是反之亦然

我想你是指向错误的目标,改为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> 

这应该工作。

我花了几天的时间来解决这个令人沮丧的问题。 我已经尝试了很多可以在网上find的东西。 最后,我发现在一个解决scheme中,这个错误可能是由不同的目标.Net项目版本(4.5和4.5.1)引起的(就像我的情况一样)。 下面的步骤为我固定它:

  1. 仔细检查解决scheme中每个项目的.Net版本。 只需右键单击项目,然后转到Properties

在这里输入图像描述

  1. 如果可能,请为所有项目设置相同的.Net版本。 如果不是至less试图改变启动项目之一(对我来说这是造成问题的那个)。

  2. 从解决scheme中删除所有Newtonsoft.Json包。

    uninstall-package newtonsoft.json -force

  3. 更新所有packages.config文件中的所有Newtonsoft.Json版本,如下所示

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

  4. 从“程序包pipe理器控制台”重新安装Newtonsoft.Json

    install-package newtonsoft.json

  5. 重build解决scheme

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

从项目引用中删除Newtonsoft.Json程序集并再次添加它。 您可能已经删除或者意外更换了dll。