7

当我尝试将我的 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,甚至仍然没有解决方案。感谢任何帮助。

4

2 回答 2

9

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

于 2012-07-10T23:26:04.320 回答
1

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

于 2012-06-14T00:43:37.273 回答