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

时间:2015-09-26 06:12:33

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

我正面临下面的错误

  

无法加载文件或程序集'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中我可以看到以下条目

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

10 个答案:

答案 0 :(得分:38)

很多事情都可能出错,而且此错误消息不会告诉您任何信息。

  

但我仍面临同样的问题。

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

转到工具&gt; NuGet包管理器并选择包管理器控制台。执行以下两个命令:

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

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

Update-Package –reinstall Newtonsoft.Json

另请查看解决方案中的.Net version项目。

这是卸载项目的Microsoft solution

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

我尝试从我的Web项目中删除引用,包config和依赖项,但我仍然收到错误。现在,我收到错误消息说无法找到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.

答案 4 :(得分:0)

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

例如,

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

谢谢。

答案 5 :(得分:0)

我有同样的问题,卸载和重新安装没有帮助。当时我正在尝试安装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应用程序教程。

答案 6 :(得分:0)

我有同样的问题。我遵循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>

答案 7 :(得分:0)

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

Update-Package –reinstall Newtonsoft.Json

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

答案 8 :(得分:0)

我遇到了同样的问题,并且在尝试创建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 对Newtonsoft.Json.dll的依赖。没有明确提及 在两个项目中都使用Newtonsoft.Json nuget包(但我们正在使用 “使用Newtonsoft.Json;”类中的命名空间),因此常见 nuget默认使用的是Newtonsoft.Json的版本9。
  • 我在.Service和.NET中同时安装了Newtonsoft.Json nuget .XUnitTests项目中,常见的nuget包开始使用 最新的v12 Newtonsoft,可以解决我的问题。

只要将它张贴在这里,就可以节省任何人的宝贵时间。

答案 9 :(得分: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>