无法加载文件或程序集'Json,版本=4.5.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed'

我得到了错误

< p >先。无法加载文件或程序集 “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>

它也没有起作用

457285 次浏览

移除牛顿软。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 –reinstall 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>

重要的:检查配置文件的configuration标记没有命名空间属性(如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

install-package newtonsoft.json -version "5.0.6"

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

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

< a href = " http://www.davepaquette.com/archive/2014/10/02/could -不-负载-文件-或-装配- newtonsoft - json - version4 - 5 - 0 - 0. aspx”> http://www.davepaquette.com/archive/2014/10/02/could -不-负载-文件-或-装配- 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,而不是相反

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

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

Add-BindingRedirect

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

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

我也有同样类型的问题。我还用下面的方法解决了这个问题: 进入< em > < / em >工具 > NuGet Package Manager并选择Package Manager Console .。最后,执行以下两条命令。)

.执行如下命令
  1. uninstall-package newtonsoft。json force
  2. 安装包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.HttpSystem.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>

在我的例子中,主要项目是还在引用旧版本的牛顿软件。Json,它不再存在于项目中(由黄色感叹号显示)。删除引用解决了问题,不需要bindingRedirect。

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

  1. 仔细检查解决方案中每个项目的. net版本。只需右键单击项目并转到Properties

enter image description here

  1. 如果可能的话,为所有项目设置相同的. net版本。如果没有,至少尝试更改启动项目(对我来说,这是导致问题的原因)。

  2. 从解决方案中移除所有Newtonsoft.Json包。

    uninstall-package newtonsoft.json -force < / p >

  3. 更新所有packages.config文件中的所有Newtonsoft.Json版本,如下所示

    <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" /> < / p >

  4. 从“Package Manager Console”重新安装Newtonsoft.Json:

    install-package newtonsoft.json < / p >

  5. 重新构建解决方案

(可选)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>();

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。错误表示Could not load file or assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies.

所以我必须在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) 网络配置 < / p >

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

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

关闭解决方案。

用文本编辑器打开packages.config*.csproj,删除任何含有Newtonsoft的行。Json

例:

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

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

再次打开解决方案并重新安装Newtonsoft。Json由Install-Package Newtonsoft.Json

这对我很管用。

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

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

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

这将解决你的问题。

< p >链接: 无法加载文件或程序集'Json,版本=7.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed'或者它的依赖项之一 < / p >

除了这里的许多答案之外,我发现了一些东西,因此添加了它。第一点,确保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

enter image description here

但是.csproj文件的路径通过文件夹...\Newtonsoft.Json.6.0.5\...

enter image description here

.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)"

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

  • 我们有一个windows服务解决方案,它有. service项目和. xunittests项目。它们都在使用一个依赖于Newtonsoft.Json.dll的通用nuget。书中没有明确提到牛顿软。在两个项目中都使用了Newtonsoft.Json包(但我们在类中使用了“using Newtonsoft.Json;”命名空间),所以常见的nuget使用了Newtonsoft的版本9。Json。

  • 我一安装好牛顿软件。在. service和. xunittests项目中,通用的nuget包开始使用最新的v12 Newtonsoft,这解决了我的问题。

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

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

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>