我们有一个 .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,它正在寻找相同的版本。
最佳答案
尝试升级到 Newtonsoft 的最新版本,当前版本为 7.0.1,您运行的版本落后了 3 个。
就此而言,我现在在 Azure Web Apps 的生产环境中部署了 4.5。尝试:
- 确保您通过 nugget 安装到项目中
- 仔细检查发布包是否包含 newtonsoft 所需的 .dll 和依赖项。
在我看来,这些系统上似乎有 a.DLL 的残余,但没有与您的包一起部署到 Azure。您还可以尝试部署到全新的已删除盒子。
关于asp.net - Azure Web应用程序-无法加载文件或程序集Newtonsoft.Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800573/