我们有一个.NET 4.5 Web应用程序,可以毫无问题地在Azure VM(2008 r2和2012)上的本地计算机,我们的本地开发服务器上运行。
但是,将相同的应用程序上载到Azure Web应用程序时,我们会收到以下异常:
Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified. -> at System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor()
at System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters()
at System.Web.Http.HttpConfiguration.DefaultFormatters()
at System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection routes)
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Web.Http.GlobalConfiguration.get_Configuration()
at MyHandler.Initialise()
在MyHandler.Initialise()内部,我们调用GlobalConfiguration.Configuration方法(所以我们可以添加路由)。
如果我在调用之前转储AppDomain程序集的内容,我可以看到列出的newtonsoft程序集,同样具有相同的标记:
…
Newtonsoft.Json - Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
System.Net.Http.Formatting - System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
System.Web.Http - System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
System.Web.Http.WebHost - System.Web.Http.WebHost, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
…
到底是怎么回事?
这几乎就像Azure上的框架有些不同,完全忽略了NewtonSoft程序集。
我看过有关此程序集不匹配版本的帖子,但这似乎不是同一个问题 - 我正在运行4.5.0.0并且它正在寻找相同的版本。
答案 0 :(得分:0)
尝试升级到最新版本的Newtonsoft,当前版本为7.0.1,您正在运行3个版本。
在本文中,我现在已经在Azure Web Apps中的生产环境中部署了4.5。尝试:
听起来好像在这些系统上有a.DLL的残余,但没有将你的软件包部署到Azure。您也可以尝试部署到一个全新的擦除盒子。
答案 1 :(得分:0)
尝试在Visual Studio中清理项目或整个解决方案。 然后从项目中卸载现有的Newtonsoft nuget软件包,重新安装并尝试重新部署。