L'aggiornamento di Windows ha causato l'interruzione del funzionamento di MVC3 e MVC4


126

sono l'unico che ha installato Windows Update (8.1) il 15 ottobre e improvvisamente MVC smette di funzionare a causa di questo avviso?

Avviso 1 Impossibile risolvere questo riferimento. Impossibile trovare l'assembly "System.Web.Mvc, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL". Verificare che l'assembly esista sul disco. Se questo riferimento è richiesto dal tuo codice, potresti ricevere errori di compilazione.

Sembra che questo aggiornamento di Windows installi una versione più recente di MVC con il numero di versione 4.0.0.1 e rimuova la versione precedente dalla cartella dei file di programma.

Qualcuno sa come risolvere questo problema senza eseguire la scansione per ciascun progetto?


Da dove viene il riferimento? Il GAC? Assemblee di riferimento o nuget?
Blowdart

1
Leggi il blog di Microsoft sull'argomento. (Grazie a e4rthdog per il collegamento a questo, solo commentando per ottenere maggiore visibilità)
Hanna,



1
Tieni presente che dovrai modificare web.config anche negli ambienti di produzione.
Capitano Kenpachi,

Risposte:


107

La soluzione migliore è aggiornare DLL alla versione 4.0.0.1. Prova a usare nuget:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804 -Project <your project name>

Questo si aggiornerà automaticamente

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
  </dependentAssembly>

Devi solo modificare manualmente la versione System.Web.Mvc in:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />


1
Sì, basta sostituire il riferimento GAC con il riferimento NuGet. Ha lavorato per noi.
abatishchev,

7
Leggi il blog di Microsoft sull'argomento. (Grazie a e4rthdog per il collegamento a questo, solo commentando per ottenere maggiore visibilità)
Hanna,

10
Qualche idea sul perché, dopo aver fatto quanto sopra, ottengo un sacco di questi avvertimenti: "ASPNETCOMPILER: avviso CS1702: presupponendo il riferimento dell'assembly 'System.Web.Mvc, versione = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' match ' System.Web.Mvc, Versione = 4.0.0.1, Cultura = neutrale, PublicKeyToken = 31bf3856ad364e35 ', potrebbe essere necessario fornire la politica di runtime "?
Farinha,

1
@Farinha, ho gli stessi avvertimenti. Non riesco a portarli via. Questi avvisi eliminano le prestazioni della build. Hai trovato un modo per risolvere questo problema?
StefanHa,

3
No @StefanHa, non ho ancora trovato una soluzione. Ho notato che ci sono un sacco di riferimenti a 4.0.0.0 in tutta l'applicazione, nei file Web.config all'interno delle cartelle Views, ma anche dopo aver modificato manualmente tutti quei messaggi rimane l'avviso.
Farinha,

26

Abbiamo dovuto toccare manualmente ogni .csproj per aggiornare la versione dalla 4.0.0.0 alla 4.0.0.1 per far partire le nostre build. Piuttosto un dolore.

I nuovi riferimenti dovrebbero apparire come:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3
Si noti che la stessa modifica è necessaria per MVC 3.0, il riferimento dovrebbe essere "3.0.0.1" per farlo funzionare di nuovo.
Andy,

Nel mio caso questo era necessario e doveva anche indicare che "Versione specifica" è "Vero"
pimbrouwers

24

Ha avuto lo stesso problema dopo l'aggiornamento:

Aggiornamento della sicurezza per Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Ma solo per progetti con riferimento a System.Web.Mvc, non installato dal pacchetto.

Il mio collega, che non aveva installato Microsoft ASP.NET MVC 4.0 Runtime e non aveva ricevuto l'aggiornamento, non aveva problemi e aveva ancora il riferimento a 4.0.0.0, non a 4.0.0.1

Ho cambiato manualmente il riferimento a 4.0.0 . 1 , dopo il check-in, il mio collega potrebbe ancora costruire con riferimento alla 4.0.0. 0 .
(Funziona sia su Win7 Pro SP1, VS2013 Pro Update 3)


22

Consulta questo blog, il modo consigliato è aggiornare il pacchetto NuGet corrispondente:

http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Per citare:

Il problema può essere risolto implementando una delle seguenti soluzioni:

  1. (Preferito) Installa Microsoft.AspNet.Mvc dalla galleria NuGet (questo installerà un reindirizzamento vincolante nel tuo web.config). Puoi farlo dal gestore di pacchetti NuGet o dalla console NuGet in Visual Studio:

    Pacchetto di installazione Microsoft.AspNet.Mvc -Version -Project PROJECTNAME

    Versione MVC 4: 4.0.40804.0

    Versione MVC 3: 3.0.50813.1

  2. Aggiornare manualmente il riferimento a System.Web.MVC.dll (non utilizzare quello nel GAC).

    Prova la finestra di dialogo Aggiungi riferimento -> Assiemi -> Estensioni.



4

Per i progetti Web, potrebbe essere necessario aggiornare anche la configurazione in web.config:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1"/>
  </dependentAssembly>

2

È necessario modificare tutti i riferimenti a System.Web.Mvc all'interno della soluzione. Eliminali e aggiungi la nuova versione 4.0.0.1.

Anche nelle proprietà cambia copy localin vero.

E nel web.config aggiungi l'assembly binding per puntare alla nuova versione di mvc:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

L'impostazione CopyLocal=truenon ci ha aiutato; vedi: System.Web.MVCnon copiato nella bincartella dal MS14-059
Danny Tuppeny,

1

Va bene,

Per me sono stati due semplici passaggi:

Innanzitutto ho modificato tutti i riferimenti a System.Web.Mvc dalla 4.0.0.0 alla 4.0.0.1,

Quindi ho dovuto andare alle proprietà di System.Web.Mvc (probabilmente perché l'avevo rimosso e aggiunto di nuovo) e cambiare copia locale in vero.

Spero che questo sia utile per qualcuno.


0

Se stai ancora riscontrando lo stesso errore dopo aver provato la soluzione @Krzysztof o una delle altre risposte sopra, una soluzione che potrebbe funzionare è disinstallare MVC Runtime 4.0

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.