Azure 网站或 Azure 云服务上的 MVC4 API [错误] : 'System.ComponentM

本文关键字:Azure ComponentM System 错误 API 网站 服务 MVC4 | 更新日期: 2023-09-27 18:37:10

当我尝试将 Web API 项目部署到 Azure 上的云网站和云托管服务时,我收到此错误:

"{"ExceptionType":"System.TypeLoadException","Message":"Could not load type 'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption' from assembly 'System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.","StackTrace":"'r'nServer stack trace: 'r'n   at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)'r'n   at System.Reflection.RuntimeAssembly.GetExportedTypes()'r'n   at System.Web.Http.Dispatcher.DefaultHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)'r'n   at System.Web.Http.WebHost.WebHostHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)'r'n   at System.Web.Http.Dispatcher.HttpControllerTypeCache.InitializeCache()'r'n   at System.Lazy`1.CreateValue()'r'n'r'nException rethrown at [0]: 'r'n   at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)'r'n   at System.Reflection.RuntimeAssembly.GetExportedTypes()'r'n   at System.Web.Http.Dispatcher.DefaultHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)'r'n   at System.Web.Http.WebHost.WebHostHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)'r'n   at System.Web.Http.Dispatcher.HttpControllerTypeCache.InitializeCache()'r'n   at System.Lazy`1.CreateValue()'r'n   at System.Lazy`1.LazyInitValue()'r'n   at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.InitializeControllerInfoCache()'r'n   at System.Lazy`1.CreateValue()'r'n'r'nException rethrown at [1]: 'r'n   at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.SelectController(HttpRequestMessage request)'r'n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage request, CancellationToken cancellationToken)'r'n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)"}"

这只是消息:

"Could not load type 'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption' from assembly 'System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'."

当我尝试从远程站点访问我的任何 API 时,就会发生这种情况。我知道这不是我的 500 个错误,因为无论发生什么,我的一些 API 都不会抛出它们。

需要注意的一件事,我不确定这是否会影响任何事情,我开始了针对 .NET 4.5 的项目,但当 Azure 网站说他们不支持 4.5 时,我将其切换到 4.0。

除了这个链接,我找不到任何关于这个的东西:http://support.appharbor.com/discussions/problems/4822-internal-server-error-500-mvc-4-web-api

除了那个家伙正在使用应用程序港,即使仍然没有解决方案。感谢任何帮助。

Azure 网站或 Azure 云服务上的 MVC4 API [错误] : 'System.ComponentM

您关于从 .NET 4.5 开始并回滚导致问题是正确的,这是有关此问题的官方文档和链接。

将 ASP.NET MVC 4 项目从 4.5 更改为面向 4.0 不会 更新实体框架程序集引用:如果更改 ASP.NET MVC 4 项目以 4.0 为目标 4.0 参考 到 EntityFramwork 程序集仍将指向 4.5 版本。自 修复此问题重新安装实体框架 NuGet 包。

在将项目切换到 .NET 4.0 后重新安装 EntityFramework 就可以了。

参考: http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253815

当我在.NET 4.0中编译一个MVC RC项目并尝试在未安装Visual Studio 2012 RC的服务器上的IIS中托管它时,我就遇到了这种情况。

(注意:在服务器上安装 Visual Studio 2012 RC 也修复了此问题,但为了向后兼容,上述修复要好得多。

所以问题似乎是由于我从 4.5 回滚到 .NET 4 和实体没有回滚引起的。实体 5 似乎只在 .NET 4.5 上运行,当部署期望 4.3.1 时,它有一个 5.0.0 DLL,它搞砸了一切。