无法加载文件或程序集“Newtonsoft.Json.Net”(HRESULT 异常:0x80131040)
Posted
技术标签:
【中文标题】无法加载文件或程序集“Newtonsoft.Json.Net”(HRESULT 异常:0x80131040)【英文标题】:Could not load file or assembly "Newtonsoft.Json.Net" (Exception from HRESULT: 0x80131040) 【发布时间】:2014-04-24 12:56:42 【问题描述】:当我们通过 nuget 安装先前版本的 Neo4jClient 时,我们看到 Newtonsoft.Json 版本 4.5.0.0 已作为依赖项安装。我们还使用其他需要 Newtonsoft.Json 版本 6.0.0.0 的软件包,当我们安装它们时,它会覆盖版本 4.5.0.0。
当我们启动我们的应用程序时,我们得到这个错误:
Unhandled Exception: System.ServiceModel.FaultException`1[System.ServiceModel.Ex
ceptionDetail]: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.
0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies.
The located assembly's manifest definition does not match the assembly referenc
e. (Exception from HRESULT: 0x80131040)
我们查看了所有配置,没有发现任何引用版本 4.5.0.0,但是在仔细查看 Neo4jClient 后,我们发现了这一点。
这里是packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AzureStorageClient" version="0.0.5.1829" targetFramework="net45" />
<package id="CouchbaseNetClient" version="1.3.4" targetFramework="net45" />
<package id="Elasticsearch.Net" version="1.0.0-beta1" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.8" targetFramework="net45" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.2.20" targetFramework="net45" />
<package id="Neo4jClient" version="1.0.0.652" targetFramework="net45" />
<package id="NEST" version="1.0.0-beta1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.2" targetFramework="net45" />
</packages>
我们已删除所有软件包,重新安装、清理和重建,但无济于事。 这是导致这种情况发生的 Neo4jClient 还是问题存在于其他地方?
更新 我们尝试过的
-
删除所有软件包并重新安装
清理和重建解决方案
程序集重定向
尝试寻找
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
但不在 .csproj 中
【问题讨论】:
它是否找到程序集本身?所以尝试将程序集设置为:复制本地:true。 @MitulátbátiCopy Local
默认也设置为 true
AutoGenerateBindingRedirects 默认不存在,您可以将其添加到 csproj 文件中
@ChrisSkardon 即使添加了它仍然无法正常工作。
【参考方案1】:
您是否尝试过通过 app.config/web.config 重定向程序集版本?
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
【讨论】:
是的,有趣的是我在解决方案中有两个项目。一个是代码,另一个是测试。测试添加了app.config
,主项目只有packages.config
,不包括<bindingRedirect>
。
然后尝试手动添加 app.config/web.config 文件并将重定向粘贴到那里?
虽然这可能是对我的情况的回答,但它不能解释为什么?为什么我需要做绑定重定向巫毒?我现在就试试...
@Mzn:这是必需的,因为一些引用的项目(在 OP 案例中为 Neo4jClient
)重新使用了旧版本的 Newtonsoft.Json
库,但由于您无法加载两个不同的版本,因此“旧参考”是“重定向到新版本”。
如果添加 assemblyBinding 不起作用,请确保您的 web.config 的配置标记(在顶部)不包含 xmlns="schemas.microsoft.com/.NetConfiguration/v2.0" 属性。以上是关于无法加载文件或程序集“Newtonsoft.Json.Net”(HRESULT 异常:0x80131040)的主要内容,如果未能解决你的问题,请参考以下文章
无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0
无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配
无法加载文件或程序集'netstandard,版本 = 2.0.0.0