[英]Web API project won't run when its deployed - Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0
[英]Visual Studio 2012 Web API project won't run - can't find Newtonsoft.Json
运行干净的解决方案并重建后,我的MVC 4 Web API项目停止工作。 它找不到Newtonsoft.Json。
我知道MS现在使用它作为默认的JSON序列化程序 - 但它不在项目的引用列表中,我不能从NuGet中添加它,因为它已经安装了它。
有谁在这里有任何想法可能会出错?
完整堆栈跟踪:
[FileNotFoundException:无法加载文件或程序集'Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其依赖项之一。 该系统找不到指定的文件。]
d:\\ Data \\ Source Controlled Projects \\ georace \\ georace \\ Server \\ GeoRaceServer \\ MvcWebRole1 \\ Global.asax.cs中的MvcWebRole1.WebApiApplication.Application_Error():70[HttpException(0x80004005):无法加载文件或程序集“Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,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状态,MethodInfo []处理程序,IntPtr appContext,HttpContext上下文)+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
好的 - 找到一个自己的工作,发布以防其他人被这个MS错误所控制。 问题是您无法添加NuGet引用,因为它已默认包含在包中。 所以...
对于NuGet 已安装的任何要重新安装的软件包,只需在软件包管理器控制台中键入以下命令:
在任何项目中更新:
Update-Package Newtonsoft.Json -Reinstall
更新特定项目
Update-Package Newtonsoft.Json -Reinstall -Project My.App
对我来说,修复此错误的唯一方法是将缺少的部分添加到我的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>
我结合了其他SO贡献者所说的几个选项,再加上一个新选项。
首先,事实证明Nuget 2.1有一些问题,这个问题记录在一个错误中,并在2.2.2中修复。 请参见: https : //nuget.codeplex.com/workitem/3050
所以,我做了以下步骤:
我遇到了同样的问题(在VS2012中)。 没有回答帮助我。 最后我解决了这个问题:
1)转到工具 - >扩展和更新这里更新(或安装)“NuGet包管理器”接下来转到“在线”并安装“快速添加NuGet”和“NuGet参考”
2)在你的项目中的1)之后,右键单击“References”并选择“Installed packages”中的“Manage Nuget Packages”找到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
检查您是否有对JSON.NET的“旧样式”(pre nuget)引用,指向项目中嵌入的过时本地副本。
我有一个旧的Reference\\Lib\\JSON.NET
,它在我的参考路径中并获得优先权。
检查JSON.NET属性页面是否指向预期的Nuget包版本。
我在实时部署的Team Server构建中遇到此问题。 我不得不修复我的原始解决方案,并进行干净的构建,以确保没有拾取旧的Reference\\Lib\\
DLL。
在我的情况下,我检查了一个同事的项目,它以某种方式使我的Newtonsoft.Json参考不好 - 所以我不得不删除它。 右键单击项目 - > Manage NuGet Packages。 在左侧单击“已安装的软件包”,然后选择Json.NET并将其卸载。 在我的情况下,我还必须卸载其他依赖包(Microsoft ASP.Net Web API和其他)。 选择左侧的“在线”并搜索Json.Net,重新安装。
我有相同的FileNotFoundException,事实证明我已经在我的项目中引用了Newtonsoft.Json,但“Copy Local”属性未设置为TRUE。 只需将其设置为TRUE即可将dll复制到输出目录中,如果这种情况也是如此。
我测试了这里所说的一切,没有任何效果。 在我的情况下,我有一个像这样的路径文件夹。
#问题的原因#。 我删除了#并且工作正常。
是什么原因导致我的问题与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。
我错误地做了这件事,它把自己整理好了。
启动了一个新的VS 2012项目后,我使用NuGet安装了Newtonsoft.JSON,如上所述,已经安装了4.5.6版本,并且看到它已经安装并安装了4.5.10,我印象深刻。
甜。
您可以尝试使用-IgnoreDependencies标志安装SocialAuth.Net软件包,然后手动安装依赖项并确保只安装最新版本的Json.Net库。
然后在运行时,SocialAuth.Net包将尊重程序集重定向并加载Json.Net(v4.5)而不是旧版本。
我在VS2012 express中遇到了同样的问题,我设法安装它
工具 - > NuGet包管理器 - >管理解决方案的NuGet包
我找到并安装了Newtonsoft Json。 到那时,解决方案中没有安装任何项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.