程序集 'System.Web.Http, ...' 使用了比被引用程序集版本更高的 'Newtonsoft.Json, Version=6.0.0.0...'。

6
当我重新构建项目时,出现了以下错误。
Assembly 'System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' uses 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' which has a higher version than referenced assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'    D:\Development\MyProject\bin\System.Web.Http.dll

我已经使用VS 2013中的Manage NuGet Packages卸载并安装了最新版本的Newtonsoft.Json(9.0.1)。为什么它仍然引用版本6.0.0.0(或者是4.5.0.0)?

我的web.config显示如下:

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

还有什么其他的解决方法吗?谢谢。

1
更改引用也要跟着变。 - Vivek Nuna
1
尝试手动更改<bindingRedirect>部分中的newVersion =“4.5.0.0”版本为您安装的最新版本,并查看是否有效。 - Rajput
@MarcusH 是的,我正在使用Web API和OWIN。我卸载并重新安装它们,只是为了确保我使用的是最新版本。 - Windhoek
错误还是一样吗?那么Newtonsoft的原始版本也不起作用吗?这完全是参考dll的版本问题,所以您需要采用试验方法逐个添加所有新的Newtonsoft dll,我知道这是一个冗长的任务,但如果您没有其他选择,那就去做吧。@Windhoek - Rajput
@Rajput 谢谢。我尝试将旧的Newtonsoft dll放回bin文件夹,但仍然出现相同的错误。我不介意试验方法...已经尝试了不同的更改2个小时了。我该如何添加所有Newtonsoft dll?我已经去到引用并添加了,就像我在上面的评论中描述的那样。这是错误的方式吗? - Windhoek
显示剩余5条评论
4个回答

9

在安装 Microsoft.AspNet.WebApi.Owin 和 Microsoft.Owin.Security.OAuth 包后,我遇到了 newtonsoft.json 引用相关的类似问题。

通过在 nuget 包管理器中执行以下命令,我解决了这个问题:

首先,卸载 newtonsoft.json:

uninstall-package Newtonsoft.Json -Force

接下来,安装最新的newtonsoft.json

install-package Newtonsoft.Json

最后,更新owin OAuth,它似乎引用了旧的newtonsoft.json版本。

update-package Microsoft.Owin.Security.OAuth

接下来,构建项目,它应该能够编译。至少我的能。


谢谢您的建议。我尝试了,但是我仍然遇到相同的构建错误。从错误消息中可以看出,它似乎在抱怨'System.Web.Http'正在尝试使用Newtonsoft.Json版本6.0.0.0(我正在使用9.0.1),而'referenced assembly'是4.5.0.0。我该如何更改System.Web.Http正在使用的Newtonsoft.Json和程序集引用? - Windhoek
好的,值得一试。你看过这些答案了吗?https://dev59.com/l2ct5IYBdhLWcg3wh9xK - Marcus Höglund
是的,我试过了。不幸的是它们不起作用。我应该如何安装'System.Web.Http'呢?我在NuGet中好像找不到它。 - Windhoek
我会重新开始并卸载所有软件包,然后逐个添加它们,并控制错误存在的位置。System.Web应该位于Microsoft.AspNet.WebApi.Owin下。 - Marcus Höglund

3
我通过进入 web.config 并更改以下内容成功解决了这个问题:
<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

转换为:

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

我不确定为什么当我的Newtonsoft.Json版本是9.0.1时,"newVersion"应该是9.0.0.0,但是如果使用后者编译就会失败。

有趣的是,当我后来在包管理器控制台中输入以下内容时:

Update-Package Newtonsoft.Json -Version 9.0.1

我可以将"oldVersion"和"newVersion"更改为任何内容,但对编译没有影响。

感谢Rajput、Marcus H和Vivek Nuna的帮助。


1
我不知道你是否还需要这个,但在我的项目中更新Newton.Json后,出现了类似的错误。我找到了这个帖子并按照所有答案的指示进行尝试,但没有成功。但是当我从引用中删除Newton.Json,然后将我更新版本的Newton.Json.dll添加到引用中,它就可以正常工作!

删除引用


0

我刚刚遇到了这个问题,并花费了太多时间来解决它。

对我起作用的是意识到我的API的发布阶段没有将web.config发布到API根文件夹中,而是发布到bin文件夹中。

将web.config移动到根目录可以解决此问题,因为IIS可以正确设置API,而不是回退到主机/机器配置(不包括重新绑定指令)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接