我得到了错误

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>

它也没有起作用


移除牛顿软。Json程序集从项目引用并再次添加它。您可能不小心删除或替换了dll。


将正确的版本部署到CI机器

这是在告诉你,程序集加载器找到了一个不同版本的Newtonsoft。Json程序集,它与您在项目中创建的引用不匹配。要正确加载程序集,必须将程序集与已编译的代码并排部署,或者在目标计算机(即GAC)中安装程序集的正确版本。

替代方案:确保配置在正确的文件中

如果要保留当前解决方案,并加载具有不同版本的程序集,请确保您发布的配置位于正确的.config文件中。请记住,没有xpto.dll。config,应用程序加载的DLL总是使用运行应用程序的配置文件。


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

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


我认为你指向错误的目标,把它改为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>

这应该有用。


我们遇到了你提到的同样的问题。我们正在使用nunit通过CI运行测试,并且我们让nunit运行一个名为tests的文件。Nunit,它描述了要运行的测试DLL fixture的列表。

每个测试装置都有自己的配置文件,但是当运行“测试。绑定重定向的Nunit文件似乎被忽略了。解决方案是将绑定重定向添加到新的配置文件“tests”。测试旁边的“配置”。nunit”文件。


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

更新

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

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

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

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


你应该更新网页。配置文件在服务器。 当nuget安装NewtonSoft更新这个文件,包括这个代码

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


致所有使用牛顿软体有问题的人。Json v4.5版本尝试在web中使用这个。Config或app.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>

重要提示:检查配置文件的配置标记是否没有命名空间属性(如https://stackoverflow.com/a/12011221/150370中建议的那样)。否则,assemblyBinding标记将被忽略。


对我来说,问题是一个贬值版的Newtonsoft.Json。重新安装也无济于事。

在Visual Studio中,进入工具->管理NuGet包。选择更新。搜索Newtonsoft。单击Update安装最新版本。


我犯了一个错误,为。net 4.5添加了一个NewtonSoft .dll文件。

我的主要项目是4.5,但当我向我的解决方案添加一个额外的项目时,它奇怪地将它添加为。net 2.0项目……当我试图使用NewtonSoft的4.5 dll时,我得到了这个“NewtonSoft”。Json cannot 't be found”错误。

解决方案(当然)是将这个新项目从。net 2.0改为4.5。


我没有运气的任何解决方案在这里(卸载,重新安装,删除引用,创建bindingRedirects等),我不得不回到旧版本的Newtonsoft。版本5.0.6以前可以工作,所以我尝试了这个版本。我必须在包控制台中输入这两个命令:

uninstall-package newtonsoft。json force

安装包newtonsoft。Json -version "5.0.6"

第一个命令中的-force选项必须强制卸载。与其他程序集的依赖关系阻止在没有它的情况下卸载。


通常情况下,添加绑定重定向应该可以解决这个问题,但对我来说行不通。经过几个小时的思考,我意识到在我的web.config中有一个xmlns属性导致了问题。从Web中的配置节点中删除xmlns属性后。配置时,绑定重定向按预期工作。

http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx


我修复了添加这个绑定重定向到我的.config文件的问题:

<runtime>
    . . . 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
                culture="neutral" />
            <bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

错误消息抱怨找不到版本4.5.0.0,当前版本的Newtonsoft。Json是6.0.0.0,所以重定向应该从4.5到6.0,而不是相反


上面没有任何帮助,但真正解决问题的是以下几点:

删除app.config中的所有依赖项绑定(从解决方案中的所有app.config文件中) 从“包管理器控制台”执行以下命令

Add-BindingRedirect

重建

参考: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx


另外,在使用NuGet还原的CI环境中,确保没有将部分文件夹检入源代码控制。默认情况下,在向源代码控制添加文件夹时,它将自动排除程序集。此外,这违背了在构建时恢复核包的整个目的。检查程序集或不检入任何包文件夹都将获得成功的构建,但更好的实践是不将包检入源代码控制。


我也有同样的问题。我还用下面的方法解决了这个问题: 进入TOOLS > NuGet包管理器,选择包管理器控制台。最后,执行以下两个命令:)

uninstall-package newtonsoft。json force 安装包newtonsoft.json


uninstall-package newtonsoft.json -force
install-package newtonsoft.json

对我来说是这样的:)


右键单击您的项目选择管理Nuget包,在搜索框中输入newtonsoft并安装最新版本。然后运行你的应用


我也遇到了同样的错误,为此纠结了好几个小时。我有一个使用Newtonsoft的web API项目。json和另一个UnitTest项目的web API项目。单元测试项目也需要Newtonsoft。json参考。但是在添加链接时,我得到了上面的异常。

我最终通过在单元测试项目的app.config中添加以下代码片段来解决这个问题:

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

我正在写一个WebApi REST服务客户端,所以对我来说,这个错误是由通过添加引用手动添加System.Net.Http和System.Net.Http. formatting程序集引起的,而我应该通过NuGet添加Microsoft.AspNet.WebApi.Client包。 另见另一个问题的答案。


关键是在配置文件中引用正确的版本。

步骤;

1-在项目引用属性中查看你的Newtonsoft.Json.dll的版本是什么,无论你的包文件夹中的版本是什么(例如,我的版本是7.0.1,参考版本是7.0.0.0)

2-看看项目期望从你的异常(我的是6.0.0.0)

3-添加依赖程序集到您的配置文件,因为它应该。

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

在我的案例中,主要项目仍然引用旧版本的Newtonsoft。Json,它不再存在于项目中(由黄色感叹号显示)。删除引用解决了问题,不需要bindingRedirect。


我花了几天时间试图解决这个令人沮丧的问题。我几乎试遍了网上能找到的所有方法。最后我发现这个错误可能是由一个解决方案中不同的目标. net项目版本(4.5和4.5.1)引起的(就像我的情况一样)。下面的步骤帮我解决了这个问题:

仔细检查解决方案中每个项目的. net版本。只需右键单击项目,然后进入属性。

If possible set the same .Net version for all projects. If not at least try to change the Startup project one (for me this was the one causing the issues). Remove all Newtonsoft.Json packs from the solution. uninstall-package newtonsoft.json -force Update all Newtonsoft.Json versions in all packages.config files, like so <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" /> Reinstall Newtonsoft.Json from "Package Manager Console" with: install-package newtonsoft.json Rebuild the solution

(可选)7。如果更改了Startup项目,请再次返回


另一个潜在的问题是,如果元素在任何其他dependentAssembly元素上有不正确的配置,那么绑定重定向似乎就会无声地失败。

确保每个元素下只有一个元素。

在某些情况下,VS生成这个:

  <dependentAssembly>
    <assemblyIdentity ...
    <assemblyIdentity ...
  </dependentAssembly>

而不是

  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>

我花了很长时间才意识到这就是问题所在!


下面的部分添加到您的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>

如果错误在本地消失,仍然出现在服务器上,与我一起工作的解决方案是删除bin文件夹和包。配置和web。配置并重新加载这些文件


我在7.0.0.0版本中遇到了完全相同的问题,导致我的问题的库是Microsoft.Rest.ClientRuntime,它以某种方式引用了错误的Newtonsoft版本(6.0.0.0)。Json,尽管正确的依赖管理在nugget(正确版本的newtonsoft。Json(7.0.0.0)被安装)。

我通过在配置文件中应用上述从6.0.0.0重定向到7.0.0.0(从Kadir Can)来解决这个问题:

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />

---->经过几天没有改变任何东西,它又出现了同样的错误。我安装了6.0.0.0版本,更新到7.0.0.0,现在可以正常工作了。


通过nuget重新安装newtonsoft包不适合我。 我必须手动调用JsonConvert。反序列化对象以绕过此问题

我改变了

HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
MyObject data = await response.Content.ReadAsAsync<MyObject>();

For

HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
string jsonStr = await response.Content.ReadAsStringAsync();
MyObject data = JsonConvert.DeserializeObject<MyObject>(jsonStr);

<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="7.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>

为我工作....只需将你正在使用的版本放在newVersion中,即(newVersion="7.0.0.0")


你可以从引用中的属性中找到你的库的安装版本。对于我的情况,我安装了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>

看看Newtonsoft的版本。Json Newtonsoft属性

然后你需要在你的web配置中添加这个版本(在我的例子中是8.0.0.0) 网络配置


我通过安装Nuget包解决了这个问题:Microsoft ASP。NET Web API 2.2客户端库。这反过来安装了newtonsoft。Json版本6.04


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


关闭解决方案。

打开包。Config和*。用csproj文本编辑器删除任意一行都有Newtonsoft。Json

Ex:

<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
      <Private>True</Private>
</Reference>

Or

<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />

再次打开解决方案并重新安装Newtonsoft。Json由安装包Newtonsoft。Json

这对我很管用。


我也为此挣扎了一天左右,尝试了所有的解决方案。 帮助我的是检查app.config中的大写字母。我有PublicKeyToken,而不是PublicKeyToken,改变后突然工作了。


你有两个不同版本的JSON。NET库。要解决这个问题,你应该把它们升级到最新版本。遵循以下步骤:

1-打开解决方案资源管理器 2右键单击解决方案名称 3选择“解决方案管理Nuget包” 从菜单中选择“更新” 5 update JSON。净包

这将解决你的问题。

链接: 无法加载文件或程序集'Newtonsoft。Json,版本=7.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed'或其依赖项之一


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

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

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


关于这个开放性话题,还有一个建议。运行“分析”后出现错误:项目设置中发生了更改。问题是:

项目/设置/构建/平台目标

显示“任意CPU”。

设置回x86(或者在您的情况下可能是x64)解决了这个问题。


updating web.config with the following assembly binding resolved the issue 
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">     
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
                culture="neutral" />
        <bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

在我的例子中,我的文件夹名为Newtonsoft.Json.6.0.7

\Newtonsoft.Json.6.0.5\…

将.csproj文件更改为6.0.7修复了这个问题。


我得到了同样的错误,并通过添加以下代码错误解决了生产。

回答这个问题已经太迟了,但也许能帮到别人。

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

对于一个最简单的解决方案,你可以设置你的项目文件自动生成绑定重定向:

<PropertyGroup>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>

https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/how-to-enable-and-disable-automatic-binding-redirection


这是非常古老的,似乎仍然有许多人有同样的问题。所以我想分享我的经验,它可能会帮助别人。

我在两个地方也有同样的问题。在一个项目中使用6.0.4.0,在不同的项目中使用4.5.0.0。

1-这对我很有用。在bin文件夹中,我有6.0.0.0 Newtonsoft.Json.dll和到4.5.0.0 dll的符号链接

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<probing privatePath="bin\4.5dlls-path;" />
<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>

如果你不知道如何在这里创建符号链接。

mklink /D "文件夹名称" " dll路径"

2-在这种情况下,当我从Web配置文件中删除部分时,它工作了。记住,我在不同的项目中参考了6.0.0.0和4.5.0.0。在符号链接中,我有12.0.1.0 dll和6.0.0.0 bin。

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<probing privatePath="bin\12.0.1dlls-path;" />
</dependentAssembly>
</assemblyBinding>
</runtime>

3-我还有一个解。如果您在不同的项目中有不同版本的Newtonsoft.Json.dll,请尝试将所有版本升级到一个版本或最新版本,但在某些情况下可能无法工作。system.net.http.formating.dll可能需要netttonsoft . json .dll 6.0.0.0版本。在这种情况下,你需要6.0.0.0的版本,所以尽量让所有的版本都相同。希望这能帮助到一些人。


我也有同样的问题,当我试图创建MassTransit队列时,我得到了异常:

"Exception: System.TypeInitializationException: The type initializer for 'MassTransit.Serialization.JsonMessageSerializer' threw an exception. ---> System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)"

对我有效的解决方案(在花了几天时间恢复了几次提交后):

We had a windows service solution that has .Service project and .XUnitTests project. Both of them were using a common nuget that has dependency on Newtonsoft.Json.dll. There was no explicit reference to Newtonsoft.Json nuget package in both projects (but we were using 'using Newtonsoft.Json;' namespace in our classes), so the common nuget was using version 9 of Newtonsoft.Json by default. As soon as I installed the Newtonsoft.Json nuget in both .Service and .XUnitTests projects, the common nuget package started using the latest v12 Newtonsoft and that fixed my issue.

如果能节省大家宝贵的时间,就贴在这里吧。


我写了一个程序来自动修复这个问题。它将确保您的程序能够使用硬盘驱动器上目标程序集的最新版本,而不仅仅是依赖库需要的版本。

https://github.com/BackTrak/DependencyFixup/releases/tag/1.0.0.0

无需再猜测,它将自动为您修复所有清单引用问题。


答案从2022年开始。 得到类似的异常错误:

Could not load file or assembly 'Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'

解决办法是进入网络。配置文件的项目,并进行以下编辑:

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