【问题标题】:Could not load file or assembly 'Newtonsoft.Json, Version=7.0.0.0无法加载文件或程序集'Newtonsoft.Json,版本 = 7.0.0.0
【发布时间】:2015-12-23 23:55:55
【问题描述】:

我正面临以下错误

无法加载文件或程序集 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)

我可以在 Web.config 中看到以下内容

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

所以我改成

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

在packeges.config中我可以看到下面的条目

但我仍然面临同样的问题。请帮忙

【问题讨论】:

  • 造成这种情况的原因可能有很多。首先:检查输出文件夹中的程序集,并检查文件版本和强名称是否符合您的预期。我怀疑强名称版本是 7.0.0.0,所以将 bindingRedirect 改回那个版本(强名称和文件版本可能不同 - 它适用于 Newtonsoft.Json 6.*)

标签: c# asp.net asp.net-mvc json.net nuget


【解决方案1】:

很多事情都可能出错,而这个错误消息什么也没告诉你。

但我仍然面临同样的问题。

也许最简单的方法是尝试重新安装软件包。

转到 工具 > NuGet 包管理器,然后选择 包管理器控制台。执行以下两条命令:

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

如果您在执行此操作后仍然收到错误,那么最终对我有用的是我从 .config 文件中删除了 Json.Net 的部分。如果它不存在,则重新安装会将其恢复,显然您需要将其删除。直到包本身有正常的解决方案,恐怕这个手动步骤是必须的。在包管理器控制台中再次执行:

Update-Package –reinstall Newtonsoft.Json

还可以查看您的解决方案中的 .Net version 项目。

这是正在卸载项目的Microsoft solution

【讨论】:

  • 我也遇到了一个将 Newtonsoft.JSON 作为先决条件的软件包的问题,​​当前安装的是 6.x。更新包不起作用,但 uinstall/reinstall 下载了当前的 9.x 并修复了错误。
【解决方案2】:

我有同样的问题。我遵循了 ekostadinov 的强制卸载/重新安装步骤,但需要添加一个额外的步骤:

我正在将我的解决方案升级到 Framework 4.5.2。我的旧 Web.Config 文件在配置标签中有一个命名空间。

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

我更新为:

<configuration>

那么 bindingRedirect 应该适用于您使用的任何版本的 NewtonSoft:

<runtime xmlns="">
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

【讨论】:

    【解决方案3】:

    如果 package.config 包含 2 个相同名称但版本不同的包,则会发生这种情况。

    例如,

    <package id="System.Spatial" version="5.6.2" targetFramework="net45" />
    <package id="System.Spatial" version="5.6.4" targetFramework="net45" />
    

    谢谢。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,卸载并重新安装没有帮助。当时我正在尝试安装 Newtonsoft.Json 的最新版本(10.0.3)。我最终安装了 7.0.1 版本,然后看到另一篇文章建议将该 .dll 复制到 :\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE。我做到了。

      再次启动安装 REST API 过程,然后收到另一个错误。尝试安装 Microsoft.Rest.ClientRuntime 2.3.2 时失败。为此,我刚刚进入 NuGet 并将其安装到我安装了 REST API 的项目中。

      再次开始安装 REST API,这次它安装了。

      哦,如果它可以帮助任何人进行搜索,我正在使用 Windows Server 2012R2 上的 VS2015 做 Azure Immersion 02-API 应用教程。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,当我尝试创建 MassTransit 队列时遇到了异常:

        "Exception: System.TypeInitializationException: The type initializer for 'MassTransit.Serialization.JsonMessageSerializer' threw an exception. ---> System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)"
        

        对我有用的解决方案(在花了几天时间恢复几个提交之后):

        • 我们有一个具有 .Service 项目和 .XUnitTests 项目。他们俩都使用了一个通用的 nuget 对 Newtonsoft.Json.dll 的依赖。没有明确提及 两个项目中的 Newtonsoft.Json nuget 包(但我们正在使用 '使用 Newtonsoft.Json;'我们的类中的命名空间),所以常见的 默认情况下,nuget 使用的是 Newtonsoft.Json 版本 9。
        • 我在 .Service 和 .XUnitTests 项目,常见的 nuget 包开始使用 最新的 v12 Newtonsoft 并解决了我的问题。

        如果它可以节省任何人的宝贵时间,请在此处发布。

        【讨论】:

        • 感谢您的指导。我正在部署一个 .Net 5 Worker 服务,一切都在本地工作,直到我部署在服务器上。原来我需要将 NewtonSoft 添加到所有依赖项目中。
        【解决方案6】:

        大多数时候发生此错误是因为不同的程序集依赖于其他程序集的特定版本。

        最简单的解决方法是使用 nuget 包管理器更新所有依赖于 Newtonsoft.Json 的包。

        它会自动设置你项目中的所有配置文件。

        【讨论】:

          【解决方案7】:

          我遇到了同样的错误,并通过对我的解决方案执行“清理”来修复它。我在 UWP 应用中使用 Newtonsoft.Json。

          【讨论】:

            【解决方案8】:

            感谢@ekostadinov。我能够使用@ekostadinov 的解决方案让它工作。在我的例子中,默认的 Web MVC 模板具有 NewtonSoft JSON 版本 6。我添加了一个类库,并从 Nuget 包管理器安装了 NewtonSoft JSON 版本 9。

            我尝试从我的 Web 项目、包配置和依赖项中删除引用,但仍然出现错误。现在,我收到错误消息说无法找到 Newtonsoft JSON 版本 6。最初我收到错误消息说无法找到 Newtonsoft JSON 版本 9。

            然后我按照@ekostadinov 的步骤进行操作。

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

            我收到关于包管理器控制台中的依赖项的警告,其中提到了 Web.Grease dll 版本的依赖项。但无论如何,它是成功的。

            为了仔细检查,我运行了上面帖子中提到的最后一个命令

            Update-Package –reinstall Newtonsoft.Json
            

            它运行时也没有任何警告。

            现在,我可以在所有项目中使用版本 9。

            【讨论】:

              【解决方案9】:

              嗯,就我而言,解决方案中有多个项目,每个项目都使用不同版本的NewtonSoft.json。我不得不继续更改每个项目的package.config 中的版本以匹配最新版本(嗯,它可以是任何版本,只是它应该在整个项目中相同)。一旦所有的 package.config 指向同一个版本,我所要做的就是

              Update-Package –reinstall Newtonsoft.Json

              现在,请注意我还必须手动更改其中一个项目中 web.config 程序集条目的版本。但这确实起到了作用。

              【讨论】:

                【解决方案10】:

                虽然为时已晚,但希望它对支持旧项目的人们有用。

                添加dependentAssembly 标记并在 oldVersion 中给出您遇到错误的版本号。 就我而言,它给出了版本 6.0.0 的错误 在 newVersion 中给出已安装的版本值,如下所述:

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

                【讨论】:

                  猜你喜欢
                  • 2011-09-04
                  • 2020-10-27
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-11-07
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多