【问题标题】:Assembly 'System.Web.Http, ...' uses 'Newtonsoft.Json, Version=6.0.0.0...' which has a higher version than referenced assembly程序集 'System.Web.Http, ...' 使用 'Newtonsoft.Json, Version=6.0.0.0...',它的版本高于引用的程序集
【发布时间】:2017-03-05 12:05:33
【问题描述】:

我在重建项目时遇到以下错误。

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>

我还应该做些什么来解决这个问题?谢谢。

【问题讨论】:

  • 也更改参考
  • 你使用的是web api和owin吗?
  • 尝试在 部分手动将 newVersion="4.5.0.0" 版本更改为您安装的新版本,看看这是否有效
  • @viveknuna - 我去了参考>添加参考>浏览>选择Newtonsoft.Json.dll>添加,但似乎什么都没有添加,我在程序集或任何列表下看不到它最近添加的程序集。
  • @MarcusH 是的,我正在使用 web api 和 owin。我卸载并再次安装它们只是为了确保我使用的是最新版本。

标签: c# asp.net json.net


【解决方案1】:

在安装 nuget 包 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),并且“引用程序集”是 4.5.0.0 .如何更改 System.Web.Http 正在使用的 Newtonsoft.Json 以及程序集引用?
  • 好的,值得一试,。你看过这些答案了吗stackoverflow.com/questions/12027543/…
  • 是的,我做到了。不幸的是,它们不起作用。我将如何安装“System.Web.Http”?我在 NuGet 中似乎找不到它。
  • 我会重新开始并卸载所有软件包,然后一一添加它们并控制错误存在的位置。 System.Web 应该在 Microsoft.AspNet.WebApi.Owin 下
【解决方案2】:

我设法通过进入 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 的帮助。

【讨论】:

    【解决方案3】:

    我不知道你是否还需要这个。 在我的项目中更新 Newton.Json 后,会发生您的错误。我找到了这个线程并遵循所有答案说明,但没有运气。 但是,当我从引用中删除 Newton.Json,然后将新版本的 Newton.Json.dll 添加到引用中,它就可以工作了!

    remove reference

    【讨论】:

      【解决方案4】:

      我刚遇到这个问题,花了太多时间修复它。

      对我来说最重要的是意识到我的 API 的发布阶段并没有在 API 的根文件夹中发布 web.config,而是在 bin 文件夹中。

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

      【讨论】:

        猜你喜欢
        • 2016-12-12
        • 1970-01-01
        • 2019-04-23
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 1970-01-01
        • 2016-06-05
        • 2012-08-20
        相关资源
        最近更新 更多