2014-10-17 11 views
8

Ho eseguito Windows Update ieri e ha introdotto alcuni problemi quando sto cercando di rilasciare una nuova versione del mio progetto ASP.NET MVC 4.Aggiornamento finestra ha rotto l'applicazione MVC

L'applicazione compila e funziona bene a livello locale, ma quando spingo la versione fino ad un test-site sul mio webserver è caduto sopra con il messaggio di errore:

System.Web.HttpCompileException: (0): error CS1705: Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 

Dopo alcune ricerche ho scoperto che questo è a causa di un aggiornamento dalla 4.0.0.0 alla 4.0.0.1. Ho rimosso la DLL System.Web.Mvc dal mio progetto e ho letto la DLL che ha la versione successiva. Di nuovo tutto funziona localmente ma non sul web. Poi ho visitato il web.config e ho cambiato qualsiasi riferimento alla 4.0.0.0 alla 4.0.0.1. Allo stesso modo, continua a funzionare internamente ma non riesce esternamente. Il messaggio di errore è:

  
Could not load file or assembly 'System.Web.Mvc, Version=3.0.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) 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileLoadException: Could not load file or assembly 'System.Web.Mvc, Version=3.0.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) 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Assembly Load Trace: The following information can be helpful to determine why the assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' could not be loaded. 

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]. 

credo che questo abbia qualcosa a che fare con Elmah che sto usando per la gestione degli errori.

Ho provato a reinstallare da Nuget come suggerito qui: Windows update caused MVC3 and MVC4 stop working ma che non ha funzionato e sto ricevendo lo stesso errore.

Informazioni aggiunte: Il server non è stato ancora aggiornato, sono preoccupato che l'aggiornamento di questo potrebbe interrompere la versione live esistente.

+0

possibile duplicato di [patch di sicurezza ASP.NET MVC alla versione 3.0.0.1 interruzioni build] (http://stackoverflow.com/questions/26406877/asp-net-mvc-security-patch-to-version-3- 0-0-1-break-build) –

risposta

9

Il messaggio di errore mi informa che è stato specificato un numero di versione errato per l'assembly MVC in uno dei file di configurazione. Trovalo il file di configurazione con la versione errata e cambialo in modo che corrisponda a qualsiasi versione che stai usando (hai citato 4.0.0.1 sopra). È necessario controllare tutti i file di configurazione, tra cui

  • Quello nella radice del progetto
  • Quello nella cartella Visualizzazioni

Si potrebbe anche fare un assembly redirect nel file di configurazione per prendere cura anche di questo - Se la sua mancanza a causa di una lib di terze parti questa potrebbe essere l'azione più appropriata da intraprendere.

In base all'ID di feedback suggerisci di utilizzare un reindirizzamento obbligatorio. Aggiungi questo al vostro web.config principale ..

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
+0

Grazie per la risposta.Ho trovato una soluzione sull'intera soluzione e tutti i System.Web.MVC sono stati modificati. Ce ne sono altri che guardano alla 4.0.0.0, come System.Data.Entity. Anche il messaggio di errore menziona 3.0.0.0, che non ho trovato da nessuna parte nella soluzione. – Jay1b

+0

@ Jay1b Dare al binding redirect un colpo, ho aggiornato il mio post per mostrare cosa si dovrebbe aggiungere per farlo funzionare. – iamkrillin

+0

tra il mio post e il tuo ho fatto esattamente questo. C'era già il reindirizzamento impostato da oldVersion = "4.0.0.0-4.0.0.1", l'ho modificato in oldVersion = "3.0.0.0-4.0.0.1" e dopo averlo provato su oldVersion = "1.0.0.0-4.0. 0.1" . Ancora senza fortuna. – Jay1b

0

Ho avuto un problema simile in cui un aggiornamento MS cambiato MVC.dll dalla 3.0.0.0 alla 3.0.0.1. Ho bisogno di mantenere varie versioni del mio software in modo da garantire la compatibilità che ho dovuto copiare la DLL 3.0.0.0 al mio progetto e fare riferimento ad esso prima di costruire il progetto.

0

Dopo aver scavato un po 'di più, ho trovato il web.config all'interno della cartella di visualizzazione che punta alla versione diversa System.web.mvc. Una volta che ho cambiato per

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

da

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

versione cambiamento di System.Web.Mvc a 4.0.0.0 da 4.0.0.1 sono stato in grado di risolvere il problema.

+0

per favore codifica tag XML in '' ' – Alexander

Problemi correlati