Azure Web应用程序 - 无法加载文件或程序集Newtonsoft.Json

时间:2015-11-19 09:59:14

标签: asp.net asp.net-mvc azure azure-web-sites

我们有一个.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并且它正在寻找相同的版本。

2 个答案:

答案 0 :(得分:0)

尝试升级到最新版本的Newtonsoft,当前版本为7.0.1,您正在运行3个版本。

在本文中,我现在已经在Azure Web Apps中的生产环境中部署了4.5。尝试:

  1. 确保您通过nugget
  2. 安装到项目中
  3. 仔细检查发布包是否具有newtonsoft所需的.dll和依赖项。
  4. 听起来好像在这些系统上有a.DLL的残余,但没有将你的软件包部署到Azure。您也可以尝试部署到一个全新的擦除盒子。

答案 1 :(得分:0)

尝试在Visual Studio中清理项目或整个解决方案。 然后从项目中卸载现有的Newtonsoft nuget软件包,重新安装并尝试重新部署。