无法加载文件或程序集'Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'

qquas 发布于 2019-05-06 asp.net 最后更新 2019-05-06 16:22 119 浏览

我收到错误

System.IO.FileLoadException : 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 reference. (Exception from 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>
它也没有工作
已邀请:

zcum

赞同来自:

从项目引用中删除Newtonsoft.Json程序集并再次添加它。您可能意外删除或替换了DLL。

mneque

赞同来自:

uninstall-package newtonsoft.json -force
install-package newtonsoft.json
对我来说诀窍:)

bsequi

赞同来自:

我一直在努力工作一天左右,尝试了每一个解决方案。 帮助我的是检查app.config中的大写字母。我改变突然工作后,我有PublicKeyToken而不是publicKeyToken。

taut

赞同来自:

我面临着同样的错误,并在数小时内挣扎。我有一个Web API项目,它使用Newtonsoft.json和另一个用于Web API项目的UnitTest项目。单元测试项目还需要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>

hid

赞同来自:

我修复了将此绑定重定向添加到我的.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,而不是反之亦然

lenim

赞同来自:

我认为你指向错误的目标,将其更改为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>
这应该工作。

riure

赞同来自:

在包管理器控制台中执行:Update-Package –reinstall Newtonsoft.Json。 UPDATE 我最初将此作为评论发布,但正如@OwenBlacker建议我将它放在这里: 如果在执行此操作后仍然出现错误,那么最终对我有用的是我从.config文件中删除了Json.Net的<dependentAssembly>部分。如果不存在,重新安装会将其恢复,显然您需要将其删除。直到包装本身有一个正常的解决方案,我担心这个手动步骤是必须的。 注意:在执行此操作之前,请阅读以下注释。 根据René在下面的评论BE AWARE,答案中发布的命令将在您的解决方案中的每个项目中重新安装软件包。因此,如果您在多个项目中使用Newtonsoft.Json包并且可能使用不同的版本,则执行上述命令可能会产生不良后果。

mid

赞同来自:

通过nuget重新安装newtonsoft软件包对我没用。 我不得不手动调用JsonConvert.DeserializeObject来绕过这个问题 我变了

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

yautem

赞同来自:

此外,在具有NuGet还原的CI环境中,请确保没有将部分文件夹签入源代码管理中。默认情况下,将文件夹添加到源代码管理时,它将自动排除程序集。此外,这打破了在构建时恢复nuget包的整个目的。检查程序集或不检入任何包文件夹都将获得成功构建,但更好的做法是不将nuget包检查到源代码管理中。

nea

赞同来自:

关闭解决方案 用文本编辑器打开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" /> 再次打开解决方案并通过Install-Package Newtonsoft.Json重新安装Newtonsoft.Json 它对我有用。

gautem

赞同来自:

在我的例子中,在下载程序集并添加对项目的引用之后,我通过在添加对项目的引用之前“解锁”DLL来解决这个问题。 使用Windows资源管理器,浏览到DLL位置,右键单击DLL,然后选择“属性”。您将在其中一个选项卡上找到“解除阻止”按钮,然后您可以添加引用并正确加载程序集。

out

赞同来自:

通常添加绑定重定向应解决此问题,但它不适合我。几个小时后,我的头撞在墙上,我意识到有一个xmlns属性导致我的web.config出现问题。从Web.config中的配置节点中删除xmlns属性后,绑定重定向按预期工作。 http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx

equia

赞同来自:

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

lvel

赞同来自:

将正确的版本部署到CI计算机 这告诉您程序集加载程序找到了Newtonsoft.Json程序集的不同版本,它与您在项目中创建的引用不匹配。要正确加载程序集,必须将程序集与已编译的代码并排部署,或者在目标计算机(即GAC)中安装正确版本的程序集。 备选方案:确保配置在正确的文件中 如果要保留当前解决方案并加载具有不同版本的程序集,请确保您发布的配置位于正确的.config文件中。请记住,没有xpto.dll.config,应用程序加载的DLL始终使用正在运行的应用程序的配置文件。

krerum

赞同来自:

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

sut

赞同来自:

我花了几天时间试图解决这个令人沮丧的问题。我已经尝试了几乎所有可以在网上找到的东西。最后,我发现在一个解决方案中,不同的目标.Net项目版本(4.5和4.5.1)可能会导致此错误(就像我的情况一样)。下面的步骤对我来说是固定的:

  1. 仔细检查解决方案中每个项目的.Net版本。只需右键单击项目,然后转到Properties
enter image description here
  1. 如果可能,为所有项目设置相同的.Net版本。如果不是至少尝试更改一个启动项目(对我来说这是导致问题的那个)。
  2. 从解决方案中删除所有Newtonsoft.Json包。 uninstall-package newtonsoft.json -force
  3. 更新所有packages.config文件中的所有Newtonsoft.Json版本,如此 <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />
  4. 使用以下命令从“程序包管理器控制台”重新安装Newtonsoft.Jsoninstall-package newtonsoft.json
  5. 重建解决方案
(可选)7。如果更改了“启动”项目,请再次返回

lenim

赞同来自:

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

uharum

赞同来自:

只需检查Newtonsoft.Json Newtonsoft properties的版本 然后你需要在你的web配置中添加该版本(在我的情况下是8.0.0.0) Web config

afuga

赞同来自:

上面没有任何东西帮助我,但实际修复它的是以下内容:

  1. 删除app.config中的所有依赖项绑定(来自解决方案中的所有app.config文件)
  2. 从“程序包管理器控制台”
  3. 执行以下命令
Get-Project -All |附加BindingRedirect
  1. 重建
参考: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx

gminus

赞同来自:

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

dab

赞同来自:

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

asaepe

赞同来自:

您的解决方案中有2个不同版本的JSON.NET库。要解决此问题,您应该将它们升级到最新版本。按着这些次序: 1-Open解决方案资源管理器 2 - 右键单击​​解决方案名称 3 - 选择Manage Nuget Packages for Solution 4 - 从菜单中选择更新 5-Update JSON.NET包 这将解决您的问题。 链接: Could not load file or assembly 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies

psed

赞同来自:

对于每个遇到Newtonsoft.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标记。

id_aut

赞同来自:

对我来说问题是Newtonsoft.Json的折旧版本。重新安装没有帮助。 在Visual Studio中,转到“工具” - >“管理NuGet包”。选择更新。搜索Newtonsoft。单击“更新”以安装最新版本。

wsed

赞同来自:

我正在编写一个WebApi REST服务客户端,所以对我来说,这个错误是由于我应该通过NuGet 添加Microsoft.AspNet.WebApi.Client程序包时通过Add Reference手动添加对System.Net.HttpSystem.Net.Http.Formatting程序集的引用。 另见this answer to another question

tvelit

赞同来自:

我有同样类型的问题。我还解决了它只是做了以下事情: 转到工具> NuGet包管理器并选择包管理器控制台。最后,执行以下两个命令:)

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

xsed

赞同来自:

这是唯一的解决方案,关键是在配置文件中引用正确的版本。 脚步; 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>

bnemo

赞同来自:

我对这里提出的任何解决方案都没有运气(卸载,重新安装,删除引用,创建bindingRedirects等)。我不得不回到旧版本的Newtonsoft。版本5.0.6之前一直在工作,所以我尝试了那个。我不得不在Package Console中输入这两个命令: uninstall-package newtonsoft.json -force install-package newtonsoft.json -version "5.0.6" 需要第一个命令中的-force选项才能强制卸载。与其他程序集的依赖关系会阻止没有它的卸载。

ivel

赞同来自:

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

zfugit

赞同来自:

我在版本7.0.0.0中遇到了完全相同的问题,并且导致我的问题的lib是Microsoft.Rest.ClientRuntime,它以某种方式指的是Newtonsoft.json的错误版本(6.0.0.0),尽管在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,现在工作正常。

wquod

赞同来自:

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

reum

赞同来自:

我们遇到了你提到的完全相同的问题。我们使用nunit通过CI运行测试,我们有nunit运行一个名为tests.nunit的文件,它描述了要运行的测试dll灯具列表。 每个测试夹具都有自己的配置文件,但是当通过“tests.nunit”文件运行时,绑定重定向似乎被忽略了。解决方案是将绑定重定向添加到新的配置文件“tests.config”,该文件位于“tests.nunit”文件旁边。

et_sed

赞同来自:

我犯了为.Net 4.5添加NewtonSoft .dll文件的错误。 我的主要项目是4.5,但当我在我的解决方案中添加了一个额外的项目时,它奇怪地将它添加为.Net 2.0项目......当我尝试使用NewtonSoft的4.5 dll时,我得到了这个“Newtonsoft.Json couldn找不到“错误。 解决方案(当然)是将这个新项目从.Net 2.0更改为4.5。

iut

赞同来自:

除了这里的许多答案,我发现了一些因此添加它。首先,确保没有从GAC引用dll。除此之外, 在添加/更改Newtonsoft.Json的dll时,项目的有时* .csproj不会被更改,或者json dll的更改版本将不会反映在解决方案的csproj中。 因此,在notepad ++中打开项目并搜索Newtonsoft.Json并将JSON从旧版本重命名为新版本。现在切换回VS后,解决方案/项目将重新加载所需的版本Newtonsoft.JSON dll。

xiste

赞同来自:

您应该更新服务器中的web.config文件。 当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>

vvel

赞同来自:

如果错误在本地消失并仍然出现在服务器上,那么与我合作的解决方案是删除bin文件夹和packages.config和web.config并重新上载这些文件

hiure

赞同来自:

另一个潜在的问题是,如果元素在任何其他dependentAssembly元素上具有不正确的配置,则绑定重定向似乎可以无声地失败。 确保每个元素下只有一个元素。 在某些情况下,VS会生成:

  <dependentAssembly>
    <assemblyIdentity ...
    <assemblyIdentity ...
  </dependentAssembly>
代替
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
花了我很长时间才意识到这是问题所在!