2012-06-13 58 views
7

當我嘗試將Web API項目部署到雲WebSites和雲託管服務時,出現此錯誤天青:Azure WebSites或Azure雲服務上的MVC4 API [錯誤]:'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption'

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

除了那傢伙正在使用的應用程序,海港,andeven仍然仍然沒有解決。感謝任何幫助。

+0

發現這種寶石在http://www.asp.net/白皮書/ mvc4-release-notes 將ASP.NET MVC 4項目從4.5更改爲目標4.0不會更新EntityFramework程序集引用:如果在將目標設置爲4.5之後將ASP.NET MVC 4項目更改爲目標4.0,則對EntityFramwork的引用程序集仍然會指向4.5版本。要解決此問題,請重新安裝EntityFramework NuGet軟件包。 – d4rklit3

回答

1

因此,這個問題似乎是由於我從4.5回滾到.NET 4而導致的,而Entity沒有回滾。看來實體5只運行在.NET 4.5上,當部署期望4.3.1時它有一個5.0.0的DLL,並且它把所有東西搞砸了。

9

從.NET 4.5開始並回滾導致該問題,你是對的,這裏是關於這個問題的官方文檔和一個鏈接。

改變一個ASP.NET MVC 4項目的目標4.0 4.5不 更新的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項目,並試圖主持它在IIS中是沒有安裝Visual Studio 2012 RC的服務器上。

(注:安裝Visual Studio 2012 RC在服務器上也是固定的問題,但爲了保持向後兼容性上面的解決方法是要好得多)