Azure WebSites或Azure云服务上的MVC4 API [错误]:'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption'

时间:2012-06-13 23:16:42

标签: c# azure asp.net-mvc-4 asp.net-web-api azure-web-sites

当我尝试将我的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,还是仍然没有解决方案。谢谢你的帮助。

2 个答案:

答案 0 :(得分:9)

你是正确的开始使用.NET 4.5并回滚导致问题,这里是关于这个问题和链接的官方文档。

  

将ASP.NET MVC 4项目从4.5更改为目标4.0不会   更新EntityFramework程序集引用:如果更改了   ASP.NET MVC 4项目以4.5为目标后引用目标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也解决了问题,但为了向后兼容,上述修复要好得多。)

答案 1 :(得分:1)

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