Visual Studio 2012 Web API 项目无法运行 - 找不到 Newtonsoft.Json
Posted
技术标签:
【中文标题】Visual Studio 2012 Web API 项目无法运行 - 找不到 Newtonsoft.Json【英文标题】:Visual Studio 2012 Web API project won't run - can't find Newtonsoft.Json 【发布时间】:2012-08-15 04:27:57 【问题描述】:运行干净的解决方案并重建后,我的 MVC 4 Web API 项目停止工作。找不到 Newtonsoft.Json。
我知道 MS 现在正在使用它作为默认 JSON 序列化程序 - 但它不在项目的引用列表中,我无法从 NuGet 添加它,因为它说它已经安装。
有人知道这里可能出了什么问题吗?
完整的堆栈跟踪:
[FileNotFoundException: 无法加载文件或程序集 'Newtonsoft.Json,版本=4.5.0.0,文化=中性, PublicKeyToken=30ad4fe6b2a6aeed' 或其依赖项之一。这 系统找不到指定的文件。] d:\Data\Source 中的 MvcWebRole1.WebApiApplication.Application_Error() 受控 项目\georace\georace\Server\GeoRaceServer\MvcWebRole1\Global.asax.cs:70
[HttpException (0x80004005): 无法加载文件或程序集 'Newtonsoft.Json,版本=4.5.0.0,文化=中性, PublicKeyToken=30ad4fe6b2a6aeed' 或其依赖项之一。这 系统找不到指定的文件。] System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication 应用程序)+12838633 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext、HttpContext 上下文、MethodInfo[] 处理程序)+175 System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态, MethodInfo[] 处理程序、IntPtr appContext、HttpContext 上下文)+304 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext 上下文)+404 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475
[HttpException (0x80004005): 无法加载文件或程序集 'Newtonsoft.Json,版本=4.5.0.0,文化=中性, PublicKeyToken=30ad4fe6b2a6aeed' 或其依赖项之一。这 系统找不到指定的文件。] System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+12851296 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +159 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+12679949
【问题讨论】:
【参考方案1】:好的 - 在我自己周围找到了一个工作,发布以防其他人被这个 MS 错误鞭打。 问题是您无法添加 NuGet 引用,因为默认情况下它已包含在包中。所以...
-
打开 packages.config
删除 Newtonsoft.Json 条目。
保存并构建
从 NuGet 重新添加 Newtonsoft.Json。
构建并运行
【讨论】:
您也可以在包管理器控制台中输入:Update-Package Newtonsoft.Json -Reinstall
。
这适用于我的开发,但发布到服务器时仍然存在相同的错误。
@RubensMariuzzo 我在哪里可以找到 VS 2012 中的包管理器控制台
@theB3RV,从菜单栏中转到:Tools,选择Library Package Manager,然后单击Package Manager Console。 docs.nuget.org/docs/start-here/…
@theB3RV 在菜单栏上,查看->其他窗口->包管理器控制台。【参考方案2】:
对于任何已经由 NuGet 安装的包,您要重新安装,只需在 包管理器控制台中键入以下命令:
在任何项目中更新:
Update-Package Newtonsoft.Json -Reinstall
在特定项目中更新
Update-Package Newtonsoft.Json -Reinstall -Project My.App
【讨论】:
请注意,您需要更新版本的 NuGet 才能使用“-Reinstall”参数。我认为version must be >= 2.1 否则它无法识别您的命令。【参考方案3】:对我来说,修复此错误的唯一方法是将缺少的部分添加到我的 web.config 文件中,我从这里的答案中得到:https://***.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>
【讨论】:
【参考方案4】:我结合了其他 SO 贡献者所说的几个选项,以及一个新选项。
首先,事实证明 Nuget 2.1 存在一些问题,这个问题被记录在一个错误中,并在 2.2.2 中得到修复。见这里:https://nuget.codeplex.com/workitem/3050
所以,我做了以下步骤:
-
根据链接将 Nuget 版本更新为 2.2.2
通过从 NUget 卸载删除了我项目中对 Json 的所有引用(右键单击项目并找到包,然后卸载(甚至
这没有这样做)
从计算机中物理删除了包文件。我在这里找到了包文件://projectdir/packages/Newtonsoft.JSON
已从物理目录 (//projectname/packages.config) 中删除 packages.config 文件
这一切都完成后,我通过 Nuget 再次添加了 Newtonsoft,然后进行了重建,它成功了。
【讨论】:
【参考方案5】:我遇到了同样的问题(在 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
【讨论】:
对我不起作用。实际上,这让事情变得更糟,因为版本无法相互解决。 它在我的情况下工作,然后我评论了第三步,我得到一个错误 'The type initializer for 'System.Web.Http.GlobalConfiguration' throw an exception' 。为此,我转到包管理器控制台并从链接***.com/questions/19091195/… 中键入 Install-Package Microsoft.AspNet.WebApi -IncludePrerelease 并且它有效。谢谢你。 这解决了我所有的问题,结束了一整天的沮丧,谢谢!【参考方案6】:检查您是否有对 JSON.NET 的“旧样式”(nuget 前)引用指向您的项目中嵌入的过时本地副本。
我有一个旧的Reference\Lib\JSON.NET
,它在我的参考路径中并获得优先权。
检查 JSON.NET 属性页面是否指向预期的 Nuget 包版本。
我在实时部署的 Team Server 构建中遇到了这个问题。我必须修复我原来的解决方案并进行干净的构建,以确保旧的Reference\Lib\
DLL 没有被拾取。
【讨论】:
成功了!在我的情况下,它是一个间接引用,引用了我自己的库,该库具有“旧式”JSON.NET 引用。所以要解决,我必须在我的库中添加一个 Nuget 包。 @uwe great :-) 请注意,您甚至不需要在 .csproj 文件中包含它 - 它只需要在参考路径文件夹中【参考方案7】:在我的情况下,我检查了一个同事的项目,该项目以某种方式使我的 Newtonsoft.Json 引用变坏了 - 所以我不得不删除它。右键单击项目-> 管理 NuGet 包。在左侧单击“Installed Packages”,然后选择 Json.NET 并卸载它。在我的情况下,我还必须卸载其他依赖包(Microsoft ASP.Net Web API 和其他)。选择左侧“在线”,搜索Json.Net,重新安装。
【讨论】:
【参考方案8】:我遇到了相同的 FileNotFoundException,事实证明我的项目中已经引用了 Newtonsoft.Json,但是“复制本地”属性未设置为 TRUE。 只需将其设置为 TRUE,这样 dll 就会被复制到输出目录(如果您也是如此)。
【讨论】:
【参考方案9】:我测试了这里所说的所有内容,但没有任何效果。就我而言,我有一个这样的路径文件夹。
#Projects/Web/App/...#我的问题的原因。我删除了 # 并且工作正常。
【讨论】:
【参考方案10】:导致我对 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。
【讨论】:
我“认为”(未经测试)您只需将 packages.xml 中的 targetFramework 属性从“net45”更改为“net40”即可获得相同的效果(假设您安装了两个版本)。 【参考方案11】:我做错了,它自己整理得很好。
在开始了一个新的 VS 2012 项目后,我使用 NuGet 安装 Newtonsoft.JSON,因为已经安装了 4.5.6 版,看到它被卸载并安装了 4.5.10 给我留下了深刻的印象。
甜。
【讨论】:
【参考方案12】:您可以尝试使用 ‑IgnoreDependencies 标志安装 SocialAuth.Net 包,然后手动安装依赖项并确保仅安装最新版本的 Json.Net 库。
然后在运行时 SocialAuth.Net 包将尊重程序集重定向并加载 Json.Net (v4.5) 而不是旧版本。
【讨论】:
【参考方案13】:我在 VS2012 express 中遇到了同样的问题,我设法从
安装它工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包
在那里我找到并安装了 Newtonsoft Json。到那时,它还没有安装在解决方案的任何项目中。
【讨论】:
以上是关于Visual Studio 2012 Web API 项目无法运行 - 找不到 Newtonsoft.Json的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2012 Express:如何使用自定义 Web 服务器进行调试
从 Visual Studio 2012 到远程 IIS 8 服务器的 Web 部署
Visual Studio Express 2012 for Web TypeScript EcmaScript 版本
Visual Studio 2012 中缺少 ASP.NET Web 应用程序模板