Visual Studio 2012 Web API项目将无法运行 - 找不到Newtonsoft.Json

时间:2012-08-19 15:09:07

标签: c# visual-studio-2012 asp.net-web-api

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

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

有没有人知道可能出现什么问题?

完整堆栈跟踪:

  

[FileNotFoundException:无法加载文件或程序集   'Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项。该   系统找不到指定的文件。]
  d:\ Data \ Source中的MvcWebRole1.WebApiApplication.Application_Error()   受控   项目\ georace \ georace \服务器\ GeoRaceServer \ MvcWebRole1 \ Global.asax.cs中:70

     

[HttpException(0x80004005):无法加载文件或程序集   'Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项。该   系统找不到指定的文件。]
  System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext的   上下文,HttpApplication app)+12838633
  System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr的   appContext,HttpContext上下文,MethodInfo []处理程序)+175
  System.Web.HttpApplication.InitSpecial(HttpApplicationState状态,   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,Version = 4.5.0.0,Culture = neutral,   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

13 个答案:

答案 0 :(得分:81)

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

  1. 打开packages.config
  2. 删除Newtonsoft.Json条目。
  3. 保存并构建
  4. 从NuGet重新添加Newtonsoft.Json。
  5. 构建并运行

答案 1 :(得分:47)

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

在任何项目中更新:

Update-Package Newtonsoft.Json -Reinstall

在特定项目中更新

Update-Package Newtonsoft.Json -Reinstall -Project My.App

答案 2 :(得分:35)

对我来说,修复此错误的唯一方法是将缺少的部分添加到我的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>

答案 3 :(得分:4)

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

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

所以,我做了以下步骤:

  1. 根据链接
  2. 将Nuget版本更新为2.2.2
  3. 通过从NUget卸载来删除项目中对Json的所有引用(右键单击项目并查找包,然后卸载(Even) 这没有做到这一点)
  4. 从计算机中物理删除了包文件。我在这里找到了包文件://projectdir/packages/Newtonsoft.JSON
  5. 从物理目录(//projectname/packages.config)
  6. 中删除了packages.config文件
  7. 一旦完成,我再次通过Nuget添加了Newtonsoft,然后进行了重建,并且有效。

答案 4 :(得分:4)

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

1) 转到工具 - &gt;扩展和更新 这里更新(或安装)“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

答案 5 :(得分:3)

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

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

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

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

答案 6 :(得分:1)

在我的情况下,我检查了一个同事的项目,它以某种方式使我的Newtonsoft.Json参考不好 - 所以我不得不删除它。右键单击项目 - &gt;管理NuGet包。在左侧单击“已安装的软件包”,然后选择Json.NET并将其卸载。在我的情况下,我还必须卸载其他依赖包(Microsoft ASP.Net Web API和其他)。选择左侧的“在线”并搜索Json.Net,重新安装。

答案 7 :(得分:1)

我遇到了相同的FileNotFoundException,事实证明我已经在项目中引用了Newtonsoft.Json,但“Copy Local”属性未设置为TRUE。 只需将其设置为TRUE即可将dll复制到输出目录中,如果是这种情况的话。

答案 8 :(得分:1)

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

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

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

答案 9 :(得分:1)

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

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

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

答案 10 :(得分:0)

我错误地做了这件事,并且把它整理好了。

启动了一个新的VS 2012项目后,我使用NuGet安装了Newtonsoft.JSON,如上所述已经安装了4.5.6版本,并且看到它已经安装并安装了4.5.10,我印象深刻。

甜。

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

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

安装它
  

工具 - &gt; NuGet包管理器 - &gt;管理NuGet包以获得解决方案

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