System.IO.FileNotFoundException: '无法加载文件或程序集“Newtonsoft.Json, Version=12.0.0.0”的错误。

6

这是我得到的错误:

System.IO.FileNotFoundException:“无法加载文件或程序集'Newtonsoft.Json,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'。系统找不到指定的文件。”

这是我的cs项目中的内容:

<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
  <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
路径似乎是正确的。 我尝试找到不同的解决方案,例如重新安装早期版本的软件包和修改app.config为以下内容:
    <?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
    </startup>
  <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.3.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

什么都没有起作用。


2
有时候,如果您通过NuGet卸载依赖项并重新安装它,可能会有所帮助。 - Willie
你尝试重新启动Visual Studio了吗?或者清理解决方案\删除bin和obj文件夹?那个路径下真的存在Newtonsoft.Json.dll吗?你可以清理packages并重新安装它。你能附上packages.json吗?你使用的是哪种类型的项目? - TemaTre
我在帖子中提到我尝试重新安装数据包。我还尝试了清理和重新启动vs2019。这是一个控制台应用程序,不是dot.net core应用程序。这是dll的文件夹:Newtonsoft.Json.12.0.3。这是路径\packages\Newtonsoft.Json.12.0.3\lib\net45,exe文件所在的位置也有另一个dll文件,我不知道它是否应该在那里。 - Dan Friedman
1
你的解决方案中没有其他使用旧版本Newtonsoft.Json的项目吗?有时旧版本会覆盖另一个项目的DLL文件。 - Digital3D
1
啊,我解决了。我在我的单元测试项目中更新了包,这样代码就可以正常运行而不会抛出错误了。只需发布您的答案,我将接受它。 - Dan Friedman
显示剩余2条评论
7个回答

3

在我的情况下,我通过Nuget包安装了 V 12.0.0.3,但我遇到了相同的错误。根据我的经验,某些版本的 NewtonSoft 会与某些版本的 Visual Studio 引起问题。

如果您只需要简单的反序列化序列化功能,那么您可以通过从解决方案中重新安装Newtonsoft当前版本并安装版本 6.0.3 来解决问题。

此版本与Visual Studio的各个版本都非常兼容。


我使用的是 Microsoft.AspNetCore.Mvc.NewtonsoftJson" 版本为 "5.0.4"。在开发环境下运行正常,但在 IIS 上托管时出现相同的错误。我不明白为什么会这样。 - Sras
我认为你需要从本地路径中删除包目录并重新构建你的项目。 - Majid Qafouri

2

尽管我已经通过“管理解决方案的NuGet包”安装了Newtonsoft,但我仍然收到这个错误。我的解决方法很简单-我还必须将“Newtonsoft.Json.dll”作为引用添加。

1.  Right-click "References" > Add > Reference > Browse > C:\Users\<username>\.nuget\packages\newtonsoft.json\12.0.3\lib\portable-net45+win8+wp8+wpa81\Newtonsoft.Json.dll > Click the "Add" button > Click "OK"
2.  I did a Build/Clean Solution (that step may not have been necessary)
3.  Build/Build Solution

重新运行程序,异常已经消失。

1
这对我有用:
我的问题是:最近更新了newtonsoft到13.0.0.0,现在VS正在抱怨缺少9.0.0.0。
1. 检查您的引用中Newtonsoft.JSON的版本enter image description here 2. 打开Web.Config并将bindingRedirect更改为您引用中的版本enter image description here

似乎13.0.0.0版本更难控制。我不得不回到12.0.3版本。 - Anders Lindén

0

在您的错误信息中,指出找不到库版本“12.0.0.0”。在您的配置文件中,列出的版本是“12.0.3”。

版本不匹配可能是问题的原因。

当我遇到这个问题时,通常是在从源代码控制中检出代码后,由于某种原因,引用丢失了。在这种情况下,卸载Nugets、检入、重新安装并构建(然后再次检入)对我有所帮助。也许这对您也有用。


1
我已经多次安装和卸载了这个软件包,但它仍然无法正常工作。 - Dan Friedman
尝试移除特定的版本引用,只保留名称。 - Code Name Jack
<Reference Include="Newtonsoft.Json,Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference> - Dan Friedman
清理解决方案,关闭Visual Studio,重新打开并构建解决方案。您的构建可能仍然具有旧引用,因此清理可能有效。 - Prany

0

我曾经遇到过完全相同的问题,当时我正在开发一个Web API和一个自己编写的DLL,我想要进行调试。

在另一个项目中开发我的DLL时出现了这个错误。

但是我按照以下步骤最终解决了我的问题:

  1. 重新安装Newtonsoft.Json
  2. 重启Visual Studio
  3. 清理解决方案(我认为这是真正的解决方案
  4. 构建/重新构建解决方案

这是您解决方案的结果,System.IO.FileNotFoundException:“无法加载文件或程序集'Newtonsoft.Json,Version=12.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed'。系统找不到指定的文件。” - Dan Friedman

0

我怀疑当您的项目运行时,它没有读取您期望的 .config 文件,因为它是从不同的进程中运行的。尝试将您的 .config 文件重命名以匹配调用进程。

提供有关您所拥有的 VS 项目类型的更多详细信息可能会有所帮助。


0

这感觉像是我这个问题的一种似曾相识情况 - 这一次我的C# EXE文件试图调用一个Web服务时,这个异常被抛出。在尝试了十几次卸载/重新安装/清理/重建/重新启动VStudio之后,我终于找到了一个解决方案,那就是将文件"Newtonsoft.Json.dll"和"Newtonsoft.Json.xml"复制到输出目录(与EXE文件并列) - 在这样做之后,错误终于消失了。 顺便说一句,我意识到这很可能是一个hacky/丑陋的解决方案,而不是真正解决核心问题 - 我只是很高兴现在可以继续前进了。


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