无法加载文件或程序集 "Newtonsoft.Json.Net" (HRESULT 异常: 0x80131040)。

9
当我们通过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导致的问题还是问题出现在其他地方?
更新: 我们尝试过以下步骤: 1. 移除所有的包并重新安装; 2. 清理和重建解决方案; 3. 程序集重定向; 4. 尝试查找 <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> ,但在 .csproj 中找不到。

它能找到程序集本身吗?因此,请尝试将程序集设置为:Copy local: true。 - Mitulát báti
@Mitulátbáti,“Copy Local”默认设置为“true”。 - Mike Barnes
1
AutoGenerateBindingRedirects不是默认存在的,你只需将其添加到csproj文件中即可。 - Charlotte Skardon
@ChrisSkardon 即使添加了它,它仍然不起作用。 - Mike Barnes
1个回答

11

你尝试过通过 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> - Mike Barnes
那么尝试手动添加app.config/web.config文件,然后将重定向粘贴在那里? - Christoph Fink
虽然这可能是我的问题的答案,但它并没有解释WHY?为什么我需要进行绑定重定向操作?我现在会尝试一下... - Lzh
1
@Mzn:这是必需的,因为一些被引用的项目(例如OPs中的Neo4jClient)需要较旧版本的Newtonsoft.Json库,但由于无法加载两个不同的版本,因此“旧引用”被“重定向到新版本”。 - Christoph Fink
如果添加assemblyBinding没有起作用,请确保您的web.config文件顶部的configuration标签不包含xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"属性。 - Alucardz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接