我得到了错误

fileloadexception:无法加载文件或程序集 “Newtonsoft。Json,版本=4.5.0.0,文化=中性, PublicKeyToken=30ad4fe6b2a6aeed'或其依赖项之一。的 定位程序集的清单定义与该程序集不匹配 参考。(异常来自HRESULT: 0x80131040)

用于我的CI构建

我尝试过的解决方案

<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>

它也没有起作用


当前回答

在我的案例中,在下载程序集并将引用添加到项目后,我通过在将引用添加到项目之前“解锁”DLL来解决这个问题。

使用Windows资源管理器,浏览到DLL位置,右键单击DLL,然后选择“属性”。您将在其中一个选项卡上找到一个“unblock”按钮,然后您可以添加引用,程序集将正确加载。

其他回答

如果您在同一解决方案中使用多个项目 和另一个的图书馆 检查是否所有项目都有相同版本的Newtonsoft。Json

我认为你指向错误的目标,把它改为4.5而不是6.0

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

这应该有用。

除了这里的许多答案之外,我发现了一些东西,因此添加了它。第一点,确保dll没有从GAC引用。除此之外,

在添加/更改Newtonsoft的dll时。Json,有时*。项目的Csproj不会被更改,否则json DLL的更改版本将不会反映在解决方案的Csproj中。

在notepad++中打开项目,搜索Newtonsoft。并显式地将Json从旧版本重命名为新版本。现在切换回VS后,解决方案/项目将重新加载所需的Newtonsoft版本。JSON dll。

你可以从引用中的属性中找到你的库的安装版本。对于我的情况,我安装了8.0.0.0。错误提示无法加载文件或程序集'Newtonsoft。Json,版本=6.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed'或其依赖项之一。

所以我必须在web.config中手动添加以下内容

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

在包管理器控制台执行:Update-Package -重装Newtonsoft.Json。

更新

我最初是作为评论发布这篇文章的,但正如@OwenBlacker建议的那样,我就把它放在这里:

如果在这样做之后仍然得到错误,那么最终对我有用的是我删除了Json。Net的<dependentAssembly>节从我的.config文件。重新安装会使它回来,如果它不存在,显然你需要删除它。在包本身有一个正常的解决方案之前,恐怕这个手动步骤是必须的。

注意:在这样做之前,请阅读下面的评论。

根据René下面的评论,请注意,答案中发布的命令将在解决方案中的每个项目中重新安装软件包。如果你用牛顿软体。Json包在几个项目中,可能使用不同的版本,只是执行上面的命令可能会有不想要的后果。