无法加载文件或程序集' Newtonsoft.Json,Version = 7.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项

时间:2016-07-05 11:14:59

标签: .net json.net .net-assembly

这一个错误让我疯了。

我在我的一个名为 BaseServices 的类库中安装了 SendGrid NuGet包,它依赖于 Newtonsoft.Json v7.0.1 ,所以它将它安装在我的包文件夹中并引用它。

在类库中,我有这个绑定重定向:

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

在ASP.NET MVC应用程序的web.config中,即使用我的类库的客户端应用程序,我有一个小于v6的版本的程序集绑定重定向指向 Newtonsoft.Json的v6 < / strong>库如此:

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

当我运行发送 BaseServices 库中的代码的电子邮件时,出现此错误:

  

线程0x1a4c已退出,代码为0(0x0)。   System.IO.FileLoadException:无法加载文件或程序集   &#39; Newtonsoft.Json,版本= 7.0.0.0,文化=中立,   公钥= 30ad4fe6b2a6aeed&#39;或其中一个依赖项。该   定位程序集的清单定义与程序集不匹配   参考。 (来自HRESULT的异常:0x80131040)文件名:   &#39; Newtonsoft.Json,版本= 7.0.0.0,文化=中立,   公钥= 30ad4fe6b2a6aeed&#39;在   SendGrid.Helpers.Mail.Mail.Get()at   BaseServices.EmailService.SendAsync(EmailMessage消息)in   MyFolder \ BaseServices \ EmailService.cs:第39行

     

===预绑定状态信息===日志:DisplayName = Newtonsoft.Json,Version = 7.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed   (完全指定)LOG:Appbase = file:/// MyFolder / Web / LOG:Initial   PrivatePath = MyFolder \ Web \ bin调用程序集:SendGrid,   Version = 7.0.3.0,Culture = neutral,PublicKeyToken = 4f047e93159395ca。   ===日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:MyFolder \ Web \ web.config日志:使用   主机配置文件:   C:\ Users \ computer \ Documents \ IISExpress \ config \ aspnet.config日志:使用   来自的机器配置文件   C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中。   日志:政策后参考:Newtonsoft.Json,版本= 7.0.0.0,   Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed日志:正在尝试   下载新的URL   file:/// C:/ Users / computer / AppData / Local / Temp / Temporary ASP.NET   文件/根/ ef9cacdf / e639667a / Newtonsoft.Json.DLL。日志:正在尝试   下载新的URL   file:/// C:/ Users / computer / AppData / Local / Temp / Temporary ASP.NET   文件/根/ ef9cacdf / e639667a / Newtonsoft.Json / Newtonsoft.Json.DLL。日志:   试图下载新的URL   文件:///MyFolder/Web/bin/Newtonsoft.Json.DLL。警告:比较   程序集名称导致不匹配:主要版本错误:无法执行   完成装配设置(hr = 0x80131040)。探测终止。

3 个答案:

答案 0 :(得分:10)

您的解决方案中有2个不同版本的JSON.NET库。要解决此问题,您应该将它们升级到最新版本。请按照以下步骤操作:

  1. 打开解决方案资源管理器
  2. 右键单击解决方案名称
  3. 选择管理解决方案的Nuget包
  4. 从菜单中选择更新
  5. 更新JSON.NET包
  6. 这将解决您的问题。

答案 1 :(得分:1)

我有这种疯狂发生在我身上。您需要确保Newtonsoft.Json程序集版本在以下位置是一致的:

  • 项目参考(dll版本)
  • 的Web.config
  • Packages.config

答案 2 :(得分:0)

我有相同的异常消息并且遇到了这个帖子。希望以下内容可以帮助其他人。

我的解决方案包含多个项目。其中一个项目使用Microsoft.AspNet.WebApi.Client。其中一个依赖项是Newtsonsoft.Json库。

但是,Microsoft.AspNet.WebApi.Client利用的库版本是6.0版。

问题在于,在某些时候,开发人员会被告知更新。所以我们更新了JSON库。一切都很好,对吗?

然后我们添加一个创建.msi安装程序的安装项目。啊......在这个.msi中,我们现在看到两个版本的JSON库。咦?那是怎么发生的。当然,我们删除旧的。

然后,在某些时候,在测试期间,我们会收到有关版本6.0的异常消息。但是,现在,当我们浏览.config文件等时,我们会看到对版本11.0 +的引用。

我在各种线程中看到了各种修复。一些人谈论强制卸载库和删除这些.config文件中的XML引用。

对我来说有用的是卸载Microsoft.AspNet.WebApi.Client以及JSON库并重新安装Microsoft.AspNet.WebApi.Client。后者带回了适当的依赖。

课程:如果您在安装项目中看到.dll的多个版本,请确保您知道哪个版本需要删除。

令人困惑的是,在升级库之后,在调试模式下,解决方案继续运行而不会发生意外。只有当我进行测试部署时,才会遇到问题。

更重要的是,升级作为第一个答案表明,对我来说不是解决方案。

相关问题