【问题标题】:MVC4 API on Azure WebSites or Azure Cloud Services [Error] : 'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption'Azure 网站或 Azure 云服务上的 MVC4 API [错误]:'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption'
【发布时间】:2012-06-13 23:16:42
【问题描述】:

当我尝试将我的 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

除了那个家伙正在使用app-harbor,即使仍然没有解决方案。感谢任何帮助。

【问题讨论】:

  • 在 asp.net/whitepapers/mvc4-release-notes 找到这个 gem以 4.5 为目标,对 EntityFramwork 程序集的引用仍将指向 4.5 版本。要解决此问题,请重新安装 EntityFramework NuGet 包。

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


【解决方案1】:

从 .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 也解决了这个问题,但为了向后兼容,上述修复要好得多。)

【讨论】:

    【解决方案2】:

    所以问题似乎是由于我从 4.5 回滚到 .NET 4 而实体没有回滚造成的。 Entity 5 似乎只在 .NET 4.5 上运行,而当部署需要 4.3.1 时,它有一个 5.0.0 的 DLL,一切都搞砸了。

    【讨论】:

      猜你喜欢
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 2013-02-18
      • 2015-12-04
      • 2014-06-16
      相关资源
      最近更新 更多