Asp.net MVC 5.2.2 su Azure

Dopo aver aggiornato il pacchetto mvc nuget dalla versione 5.1.0 alla 5.2.2, la nostra macchina (webrole) su Azure si rifiuta di avviare il ruolo web. Era in stato di riciclaggio. Ho trovato un errore nel registro eventi:

The description for Event ID 1007 from source Windows Azure Runtime 2.4.0.0 cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer. If the event originated on another computer, the display information had to be saved with the event. The following information was included with the event: 820 WaIISHost Role entrypoint could not be created: System.TypeLoadException: Unable to load the role entry point due to the following exceptions: -- System.IO.FileLoadException: Could not load file or assembly 'System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) File name: 'System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. Note: There is some performance penalty associated with assembly bind failure logging. To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog]. ---> System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) at System.Reflection.RuntimeModule.GetTypes() at System.Reflection.Assembly.GetTypes() at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetRoleEntryPoint(Assembly entryPointAssembly) --- End of inner exception stack trace --- at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetRoleEntryPoint(Assembly entryPointAssembly) at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CreateRoleEntryPoint(RoleType roleTypeEnum) at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum) the message resource is present but the message is not found in the string/message table 

Ho provato a cercare su internet, ma senza una risposta utile. Non ero in grado di risolverlo diversamente dal downgrade. Fortunatamente la versione 5.1.1 del pacchetto funziona.

Aggiornamento 1: Dopo alcune prove ed errori, ho trovato che i pacchetti asp.net mvc sono OK fino alla versione 5.1.3 Sembra che i pacchetti da 5.2.0 in poi non siano supportati.

Aggiornamento 2: Abbiamo deciso di dividere il nostro web e web.api, quindi non ho più avuto questo problema. La mia ipotesi migliore è che ci fosse effettivamente nuget, che si riferiva al vecchio pacchetto di asp.net mvc.

Ho avuto un problema simile. Abbiamo ereditato un progetto e aggiornato la versione MVC di ASPNET alla 5.2.2.0. Non è stato ansible eseguire la distribuzione in Azure. L’unico errore che abbiamo trovato è stato quello che hai menzionato qui.

Abbiamo corretto ogni file web.config in modo che le versioni precedenti venissero reindirizzate a una versione più recente, ma avevamo ancora lo stesso problema.

Quindi abbiamo scritto un piccolo metodo di test che ha iterato su ogni Assembly e abbiamo visto che un pacchetto NuGet utilizzava ancora ASP.net MVC 4.0. Questo pacchetto era una vecchia versione e non era stato aggiornato per un po ‘. Ho scaricato la fonte, aggiornato il Nuget Mvc e inserito manualmente la DLL.

Abbiamo schierato di nuovo e tutto è andato alla perfezione.

Ecco il metodo di prova.

  private void TestAssemblies() { var allAssemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly item in allAssemblies) { PrintAssembly(item); } } private void PrintAssembly(Assembly assembly) { foreach (var item in assembly.GetReferencedAssemblies()) { if (item.FullName.Contains("System.Web.Mvc")) { Debug.WriteLine(item); Debug.WriteLine("Parent: " + assembly.FullName); Debug.WriteLine("------------------------------------------------------------"); } } } 

MVC 5.2.2 funziona perfettamente bene in Azure. È probabile che il riciclaggio del ruolo indichi che non hai correttamente implementato correttamente la tua applicazione o che hai una dipendenza nascosta da una versione precedente di MVC che un reindirizzamento obbligatorio non può gestire.

Ti suggerisco caldamente di leggere tutte le voci della grande serie di Kevin Williamson sui problemi relativi alle installazioni di Azure .

Ci sono un sacco di cose che possono andare storte, quindi piuttosto che cercare di creare un elenco generico valido per tutti, rivedere i post del blog e quindi pubblicare un commento se non sei in grado di capire cosa sta accadendo in particolare.

Dato l’errore che hai postato, supponendo che tu abbia il corretto reindirizzamento del binding a @Yishai Galatzer, potresti avere una DLL nella tua distribuzione che ha una dipendenza nascosta su MVC 5.1.0.0. Ti suggerirei di utilizzare un programma come Jetbrains DotPeek per ispezionare tutte le tue DLL nel tuo pacchetto e osservare i loro riferimenti. Sospetto che ne troverai uno che dipende da solo dalla versione 5.1.0.0.

 I have also face similar problem with mvc5.2.2 azure deployment.. 

la soluzione definitiva è la necessità di aggiungere questo web.config

    `` 

Dal suo aspetto, sembra che manchi un reindirizzamento di binding a MVC 5.2.2 nel web.config. Questo dovrebbe funzionare.

Stiamo lavorando per verificare questo scenario. Ma facci sapere se questo funziona per te. Nel tuo web.config guarda la seguente sezione e assicurati che corrisponda a questo xml qui sotto:

Ho avuto esattamente un problema paio di giorni fa. Si prega di fare riferimento a questo post. È necessario aggiungere la sezione a WaIISHost.exe.config che generalmente è “E: \ base \ x64” sulla VM.

Molte volte ho trovato il problema nel file ~ \ Views \ Web.config. Mantiene un riferimento alla vecchia versione MVC. Basta aggiornarlo manualmente.

Se ciò non funziona, effettua una ricerca a testo integrale della tua soluzione in Sublime Text o qualche altro strumento al di fuori di VS e cerca la stringa di versione che causa problemi.

Ho avuto lo stesso problema, in cui ha funzionato bene sulla mia macchina Dev, ma quando è stato distribuito, ho riscontrato un errore di assemblaggio. Per risolvere questo problema, ho dovuto modificare “oldVersion” dalla versione 0.0.0.0 alla versione 1.0.0.0

     

A