59

运行干净的解决方案并重建后,我的 MVC 4 Web API 项目停止工作。它找不到 Newtonsoft.Json。

我知道 MS 现在使用它作为默认的 JSON 序列化程序 - 但它不在项目的引用列表中,我无法从 NuGet 添加它,因为它说它已经安装。

有没有人知道这里可能出了什么问题?

完整的堆栈跟踪:

[FileNotFoundException:无法加载文件或程序集“Newtonsoft.Json,版本=4.5.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。系统找不到指定的文件。]
MvcWebRole1.WebApiApplication.Application_Error() in d:\Data\Source Controlled Projects\georace\georace\Server\GeoRaceServer\MvcWebRole1\Global.asax.cs:70

[HttpException(0x80004005):无法加载文件或程序集“Newtonsoft.Json,版本=4.5.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。系统找不到指定的文件。]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12838633
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175
System.Web。 HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
+304 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException(0x80004005):无法加载文件或程序集“Newtonsoft.Json,版本=4.5.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。系统找不到指定的文件。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12851296 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) + 12679949

4

13 回答 13

81

好的 - 在我自己周围找到了一个工作,发布以防其他人被这个 MS 错误所困扰。问题是您无法添加 NuGet 引用,因为默认情况下它已包含在包中。所以...

  1. 打开 packages.config
  2. 删除 Newtonsoft.Json 条目。
  3. 保存并构建
  4. 从 NuGet 重新添加 Newtonsoft.Json。
  5. 构建并运行
于 2012-08-19T15:35:37.387 回答
47

对于您想要重新安装的 NuGet安装的任何包,只需在包管理器控制台中键入以下命令:

在任何项目中更新:

Update-Package Newtonsoft.Json -Reinstall

在特定项目中更新

Update-Package Newtonsoft.Json -Reinstall -Project My.App
于 2013-01-16T20:16:28.270 回答
36

对我来说,修复此错误的唯一方法是将缺少的部分添加到我的 web.config 文件中,我从这里的答案中得到: https ://stackoverflow.com/a/20414714/940783

这是我需要添加的内容:

  <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>
于 2014-02-06T20:35:05.487 回答
4

我结合了其他 SO 贡献者所说的几个选项,以及一个新选项。

首先,事实证明 Nuget 2.1 有一些问题,这个问题被记录在一个 bug 中,并在 2.2.2 中得到修复。见这里:https ://nuget.codeplex.com/workitem/3050

所以,我做了以下步骤:

  1. 根据链接将 Nuget 版本更新为 2.2.2
  2. 通过从 NUget 卸载删除了我项目中对 Json 的所有引用(右键单击项目并找到包,然后卸载(即使这样也没有这样做)
  3. 从计算机中物理删除了包文件。我在这里找到了包文件://projectdir/packages/Newtonsoft.JSON
  4. 从物理目录(//projectname/packages.config)中删除了packages.config文件
  5. 完成这一切后,我通过 Nuget 再次添加了 Newtonsoft,然后进行了重建,并且成功了。
于 2013-03-11T01:00:43.947 回答
4

我有同样的问题(在 VS2012 中)。没有答案对我有帮助。最后我解决了这个问题:

1) 转到工具-> 扩展和更新这里更新(或安装)“NuGet 包管理器”接下来转到“在线”并安装“快速添加 NuGet”和“NuGet 参考”

2)在您的项目中安装所有1)后,右键单击“参考”并在“已安装的包”中选择“管理Nuget包”找到Json.NET。单击卸载 - 您现在无法执行此操作,但它会显示您必须首先卸载的内容(某些 ASP Web Api 客户端)。所以卸载所有这些并再次尝试卸载“Json.NET”。现在转到“在线”并安装“Json.NET”、“ASP.NET WEB API 客户端库”和“ASP.NET WEB API 客户端 OData”。

3) 在 Global.asax 中删除行“WebApiConfig.Register(GlobalConfiguration.Configuration);”

构建解决方案,一切都应该没问题..我希望这可以帮助某人:) gl

于 2014-03-04T13:44:57.020 回答
3

检查您是否有对 JSON.NET 的“旧样式”(nuget 前)引用,指向嵌入在您的项目中的过时本地副本。

我有一个旧的Reference\Lib\JSON.NET,它在我的参考路径中并获得优先权。

检查 JSON.NET 属性页是否指向预期的 Nuget 包版本。

我在实时部署的 Team Server 构建中遇到了这个问题。我必须修复我原来的解决方案并进行干净的构建,以确保旧的Reference\Lib\DLL 没有被拾取。

于 2012-11-15T02:58:28.117 回答
1

就我而言,我检查了一个同事的项目,该项目不知何故使我的 Newtonsoft.Json 参考变坏了——所以我不得不删除它。右键单击项目-> 管理 NuGet 包。在左侧单击“Installed Packages”,然后选择 Json.NET 并卸载它。在我的情况下,我还必须卸载其他依赖包(Microsoft ASP.Net Web API 和其他)。选择左侧的“在线”,搜索Json.Net,重新安装。

于 2012-12-18T20:40:52.330 回答
1

我遇到了相同的 FileNotFoundException,事实证明我已经在我的项目中引用了 Newtonsoft.Json,但是“复制本地”属性未设置为 TRUE。只需将其设置为 TRUE,这样 dll 就会被复制到输出目录(如果您也是这种情况)。

于 2014-01-24T15:15:54.517 回答
1

我测试了这里所说的一切,但没有任何效果。就我而言,我有一个这样的路径文件夹。

  • #项目/网络/应用程序/...

# 我的问题的原因。我删除了 # 并且工作正常。

于 2014-02-20T18:31:02.323 回答
1

导致我的 Newtonsoft.json 问题的原因略有不同。我开发了一个针对 .Net 4.5 构建的 Windows 应用程序。后来发现客户的环境只支持.Net 4.0。我已将解决方案复制到一个新区域以保留 .Net 4.5 的工作并将解决方案属性更改为 Microsoft.Net 4.0。我得到了 Newtonsoft.json 找不到的错误,我错过了一个参考。

我按照上述程序删除了 packages.config;删除 Newtonsoft.json;确保 Newtonsoft.json 已从 \packages 目录中删除;然后从 NuGet 重新安装 Newtonsoft.json。我能够使用 .Net 4.0 编译和运行应用程序

在此之前,packages.config 文件显示 Newtonsoft.json 所针对的 .Net 版本是 .Net 4.5。删除和添加 Newtonsoft.json 现在将目标设为 .Net 4.0。

于 2014-03-16T14:13:49.480 回答
0

我错误地做到了这一点,它自我整理得很好。

开始一个新的 VS 2012 项目后,我使用 NuGet 安装 Newtonsoft.JSON,如前所述,已经安装了 4.5.6 版,看到它被卸载并安装了 4.5.10 给我留下了深刻的印象。

甜的。

于 2012-10-26T15:10:35.393 回答
0

您可以尝试使用 -IgnoreDependencies 标志安装 SocialAuth.Net 包,然后手动安装依赖项并确保仅安装最新版本的 Json.Net 库。

然后在运行时 SocialAuth.Net 包将尊重程序集重定向并加载 Json.Net (v4.5) 而不是旧版本。

于 2014-02-18T09:51:29.463 回答
0

我在 VS2012 express 中遇到了同样的问题,我设法从

工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包

在那里我找到并安装了 Newtonsoft Json。到那时,它还没有安装在解决方案的任何项目中。

于 2016-07-16T12:09:28.340 回答