无法加载文件或程序集“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 还是问题存在于其他地方?

更新 我们尝试过的

    删除所有软件包并重新安装 清理和重建解决方案 程序集重定向 尝试寻找 &lt;AutoGenerateBindingRedirects&gt;true&lt;/AutoGenerateBindingRedirects&gt; 但不在 .csproj 中

【问题讨论】:

它是否找到程序集本身?所以尝试将程序集设置为:复制本地:true。 @Mitulátbáti Copy 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,不包括&lt;bindingRedirect&gt; 然后尝试手动添加 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

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝

无法加载文件或程序集或其依赖项之一

寻找解决策略:无法加载文件或程序集[重复]