无法加载文件或程序集“Newtonsoft.Json, Version=7.0.0.0”。

24

我遇到了下面的错误:

找不到文件或程序集“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>

在packages.config文件中,我可以看到以下条目。

但是我仍然遇到了同样的问题。请帮忙。


这可能有很多原因。首先:检查输出文件夹中的程序集,并检查文件版本和强名称是否符合您的预期。我怀疑强名称版本为 7.0.0.0,所以将 bindingRedirect 更改回那个版本(强名称和文件版本可能不同 - 对于 Newtonsoft.Json 6.* 它确实如此)。 - Shaun Wilde
10个回答

43

很多问题可能会出现,而这个错误信息并没有告诉您任何有用的信息。

但我仍然遇到同样的问题。

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

前往工具 > NuGet软件包管理器 并选择程序包管理器控制台。执行以下两个命令:

uninstall-package newtonsoft.json -force
install-package newtonsoft.json
如果您在执行操作后仍然收到错误提示,那么最终对我有用的方法是从我的.config文件中删除了Json.Net的
。如果它不存在,则重新安装将其恢复,并且显然需要将其删除。在软件包本身有一个正常解决方案之前,恐怕这个手动步骤是必须的。再次在软件包管理器控制台中执行:
Update-Package –reinstall Newtonsoft.Json

同时查看您解决方案中项目的.Net版本

这是使用Visual Studio架构建模工具验证您的架构时出现“引用无法解析”错误的Microsoft解决方案,通过卸载项目实现。


我也遇到了一个问题,其中一个包需要预先安装Newtonsoft.JSON,而当前安装的是6.x版本。更新该包并没有起作用,但是卸载/重新安装下载了当前的9.x版本并修复了错误。 - ajeh

6

我遇到了同样的问题。我按照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>


非常感谢您发布这个解决方案。我的绑定重定向已经就位,所以我只是采纳了您的建议,将所有出现的<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 替换为<configuration> 然后它就可以工作了!我的Newtonsoft.Json版本12.0.2的绑定重定向如下:<dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> </dependentAssembly> - Tangere Apps

1
我遇到了同样的问题,卸载和重新安装没有帮助。当时我正在尝试安装最新版本(10.0.3)的Newtonsoft.Json。最终我安装了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 App教程。

1

我遇到了相同的问题,当我尝试创建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)"

以下是对我起作用的解决方案(在花费几天时间还原多个提交之后):
  • 我们有一个 Windows 服务解决方案,其中包含 .Service 项目和 .XUnitTests 项目。它们都使用一个常见的 nuget,该 nuget 依赖于 Newtonsoft.Json.dll。在这两个项目中都没有显式引用 Newtonsoft.Json nuget 包(但是我们在我们的类中使用了 'using Newtonsoft.Json;' 命名空间),因此默认情况下,公共 nuget 使用版本 9 的 Newtonsoft.Json。
  • 当我在 .Service 和 .XUnitTests 项目中安装了 Newtonsoft.Json nuget 后,公共 nuget 包开始使用最新的 v12 Newtonsoft,这解决了我的问题。
如果有人能节省他们宝贵的时间,我会在这里发布它。

感谢您的指引。我正在部署一个 .Net 5 工作服务,本地一切正常,但在服务器上部署时出现问题。结果发现我需要将 NewtonSoft 添加到所有依赖项目中。 - WadeTheFade

1
如果 package.config 包含两个同名但版本不同的包,就可能会出现这种情况。
例如,
<package id="System.Spatial" version="5.6.2" targetFramework="net45" />
<package id="System.Spatial" version="5.6.4" targetFramework="net45" />

谢谢您。

0

大多数情况下,这个错误是因为不同的程序集依赖于某些其他程序集的特定版本而发生的。

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

它将自动设置您项目中的所有配置文件。


0

嗯,在我的情况下,解决方案中有多个项目,每个项目都使用不同版本的NewtonSoft.json。我不得不前进并在每个项目的package.config中更改版本以与最新版本匹配(嗯,它可以是任何版本,只是在各个项目之间应该相同)。一旦所有的package.config指向同一版本,我所要做的就是

Update-Package -reinstall Newtonsoft.Json

现在,注意我还必须手动更改一个项目的web.config程序集条目中的版本,但那也能完成工作。


0

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


0

也许现在已经有点晚了,但希望对支持旧项目的人有所帮助。

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

0

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

我尝试从我的Web项目、packages配置文件和依赖项中删除引用,但仍然出现错误。现在,我收到的错误消息是无法找到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。


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