这一个错误让我疯了。
我在我的一个名为 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)。探测终止。
答案 0 :(得分:10)
您的解决方案中有2个不同版本的JSON.NET库。要解决此问题,您应该将它们升级到最新版本。请按照以下步骤操作:
这将解决您的问题。
答案 1 :(得分:1)
我有这种疯狂发生在我身上。您需要确保Newtonsoft.Json程序集版本在以下位置是一致的:
答案 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的多个版本,请确保您知道哪个版本需要删除。
令人困惑的是,在升级库之后,在调试模式下,解决方案继续运行而不会发生意外。只有当我进行测试部署时,才会遇到问题。
更重要的是,升级作为第一个答案表明,对我来说不是解决方案。