Windows Azure部署 - 无法加载文件或程序集“Newtonsoft.Json”

3

我创建了一个带有Web API的MVC 4应用程序。它在本地环境中运行良好。当我将其部署到Azure时,它会出现以下错误。

异常信息:
异常类型:HttpException
异常消息:无法加载文件或程序集“Newtonsoft.Json,Version=6.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或其某个依赖项。所定位的程序集清单定义与程序集引用不匹配(HRESULT 异常: 0x80131040)。位置:System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) 无法加载文件或程序集“Newtonsoft.Json,Version=6.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或其某个依赖项。所定位的程序集清单定义与程序集引用不匹配(HRESULT 异常: 0x80131040)。位置:System.Net.Http.Formatting.BaseJsonMediaTypeFormatter..ctor() at System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() at System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters() at System.Web.Http.HttpConfiguration.DefaultFormatters(HttpConfiguration config) at System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection routes) at System.Web.Http.GlobalConfiguration.b__0() at System.Lazy1.CreateValue() at System.Lazy1.LazyInitValue() at System.Lazy1.get_Value() at System.Web.Http.GlobalConfiguration.get_Configuration() at System.Web.Http.GlobalConfiguration.Configure(Action1 configurationCallback) at Activity.Web.Monitor.UI.MvcApplication.Application_Start()

有什么解决方法吗?

2个回答

1

可能在你的解决方案中存在另一个版本的Newtonsof.json。你需要删除你的neftonsoft.json文件并用正确的版本(6.0.0.0)替换它。


目前它的版本是7.0.0.0,如何在同一项目中安装版本6.0.0.0? - Sanoop
在这种情况下,您可以卸载版本为7的包并安装版本为6的包。在NuGet包管理器控制台上使用“Uninstall-Package <package name>”和“Install-Package <package name> -Version <version>”命令即可完成操作。 - Amit
感谢更新。7.0.1.18622是dll的实际版本。 - Sanoop

1

出现 "The located assembly's manifest definition does not match the assembly reference" 的原因是CLR在查找版本6.0时发现了另一个版本的Newtonsoft.json。

这是因为您的应用程序正在引用Newtonsoft.Json的另一个版本,而应用程序中的某些其他依赖项使用Newtonsoft.json的6.0版本。如果您通过.cspkg(使用7zip)深入挖掘并从siteroot\0\bin中提取Newtonsoft.json,您将了解到包中包含哪个版本的Newtonsoft。

请检查项目引用以查看Netonsoft.json的CopyLocal是否设置为true。此外,在web.config上添加assembly redirection,以确保任何旧版本的Newtonsoft.json的调用都被重定向到所需版本。


7.0.1.18622 是实际的 DLL 版本。但在 packages.config 中它看起来像下面这样。 - Sanoop
实际的dll版本是7.0.1.18622 Packages.config如下所示 <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />我已经按照以下方式更新了web.config<dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.1" /> </dependentAssembly>但仍然无法正常工作。 - Sanoop
只需添加一个程序集重定向,它就应该可以工作。但请验证在您的cspkg中包含了什么。 - Amit
请问您能指导我如何验证cspkg吗? - Sanoop
cspkg 是一个压缩文件,因此您可以将扩展名更改为 .zip 或者如果您安装了 7-Zip,您可以透过该文件进行浏览。从中提取 Newtonsoft.json 以验证版本。 - Amit
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接