Azure WebSites或Azure云服务上的MVC4 API :’System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption’

当我尝试将我的Web API项目部署到Azure上的Cloud WebSites和Cloud Hosted Services时,我收到此错误:

"{"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

除了那家伙正在使用app-harbour,andeven仍然没有解决方案。 谢谢你的帮助。

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

将ASP.NET MVC 4项目从4.5更改为目标4.0不会更新EntityFramework程序集引用:如果在目标4.5之后将ASP.NET MVC 4项目更改为目标4.0,则对EntityFramwork程序集的引用仍将指向4.5版本。 要解决此问题,请重新安装EntityFramework 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并且它搞砸了所有内容。