无法加载文件或程序集“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)引起的(就像我的情况一样)。 下面的步骤为我固定它:
- 仔细检查解决scheme中每个项目的.Net版本。 只需右键单击项目,然后转到
Properties
。
-
如果可能,请为所有项目设置相同的.Net版本。 如果不是至less试图改变启动项目之一(对我来说这是造成问题的那个)。
-
从解决scheme中删除所有
Newtonsoft.Json
包。uninstall-package newtonsoft.json -force
-
更新所有
packages.config
文件中的所有Newtonsoft.Json
版本,如下所示<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />
-
从“程序包pipe理器控制台”重新安装
Newtonsoft.Json
:install-package newtonsoft.json
-
重build解决scheme
(可选)7.如果更改了启动项目,请将其重新返回
从项目引用中删除Newtonsoft.Json程序集并再次添加它。 您可能已经删除或者意外更换了dll。