La actualización de Windows provocó que MVC3 y MVC4 dejaran de funcionar

126

¿Soy el único que instaló una actualización de Windows (8.1) el 15 de octubre y de repente MVC dejó de funcionar debido a esta advertencia?

Advertencia 1 No se pudo resolver esta referencia. No se pudo encontrar el ensamblado "System.Web.Mvc, Versión = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL". Verifique para asegurarse de que el ensamblaje existe en el disco. Si su código requiere esta referencia, puede obtener errores de compilación.

Parece que esta actualización de Windows instala una versión más reciente de MVC con el número de versión 4.0.0.1 y elimina la versión anterior de la carpeta de archivos del programa.

¿Alguien sabe cómo solucionar esto sin rastrear cada proyecto?

Yogurtu
fuente
¿De dónde es la referencia? El GAC? ¿Ensambles de referencia o nuget?
Blowdart
1
Lea el blog de Microsoft al respecto. (Gracias a e4rthdog por vincularse a esto, solo comentando para obtener más visibilidad)
Hanna
1
Tenga en cuenta que también deberá editar web.config en sus entornos de producción.
Capitán Kenpachi

Respuestas:

107

La mejor solución es actualizar DLL a la versión 4.0.0.1. Intenta usar nuget:

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

Esto se actualizará automáticamente

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

Solo tiene que editar la versión System.Web.Mvc manualmente en:

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

Krzysztof Kalinowski
fuente
1
Sí, simplemente reemplace la referencia de GAC con la referencia de NuGet. Trabajó para nosotros
abatishchev
77
Lea el blog de Microsoft al respecto. (Gracias a e4rthdog por vincularse a esto, solo comentando para obtener más visibilidad)
Hanna
10
Alguna idea de por qué, después de hacer lo anterior, recibo un montón de estas advertencias: "ASPNETCOMPILER: advertencia CS1702: Suponiendo la referencia de ensamblado 'System.Web.Mvc, Versión = 4.0.0.0, Cultura = neutral, PublicKeyToken = 31bf3856ad364e35' coincidencias ' System.Web.Mvc, Version = 4.0.0.1, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ', es posible que deba proporcionar una política de tiempo de ejecución "?
Farinha
1
@ Farinha, tengo las mismas advertencias. No puedo alejarlos. Estas advertencias matan el rendimiento de la compilación. ¿Encontraste una manera de arreglar esto?
StefanHa
3
No @StefanHa, todavía no he encontrado una solución. Noté que hay un montón de referencias a 4.0.0.0 en toda la aplicación, en los archivos Web.config dentro de las carpetas de Vistas, pero incluso después de cambiarlas manualmente, la advertencia permanece.
Farinha
26

Tuvimos que tocar manualmente cada .csproj para actualizar la versión de 4.0.0.0 a 4.0.0.1 para que nuestras compilaciones funcionen . Todo un dolor

Las nuevas referencias deberían verse así:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Zach La Lond
fuente
3
Tenga en cuenta que se necesita el mismo cambio para MVC 3.0, la referencia debe ser "3.0.0.1" para que vuelva a funcionar.
Andy
En mi caso esto se requiere, y también es necesario indicar que "Versión específica" es "verdadero"
pimbrouwers
24

Tuve el mismo problema después de la actualización:

Actualización de seguridad para Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Pero solo para proyectos con una referencia al System.Web.Mvc, no instalado por paquete.

Mi colega, que no había instalado Microsoft ASP.NET MVC 4.0 Runtime y no recibió la actualización, no tuvo problemas y todavía tenía la referencia a 4.0.0.0, no a 4.0.0.1 Cambié

manualmente la referencia a 4.0.0 . 1 , después del check-in, mi colega aún podría construir con una referencia a 4.0.0. 0 .
(Trabajando ambos en Win7 Pro SP1, VS2013 Pro Update 3)

Mandíbulas
fuente
22

Consulte este blog, la forma recomendada es actualizar el paquete NuGet correspondiente:

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

Citar:

El problema se puede resolver implementando una de las siguientes soluciones:

  1. (Preferido) Instale Microsoft.AspNet.Mvc desde la galería NuGet (esto instalará una redirección de enlace en su web.config). Puede hacerlo desde el administrador de paquetes NuGet o la consola NuGet dentro de Visual Studio:

    Install-Package Microsoft.AspNet.Mvc -Version -Project PROJECTNAME

    Versión MVC 4: 4.0.40804.0

    Versión MVC 3: 3.0.50813.1

  2. Actualice manualmente la referencia a System.Web.MVC.dll (no use la del GAC).

    Pruebe el cuadro de diálogo Agregar referencia -> Ensamblajes -> Extensiones.

Miguel Lacouture
fuente
4

Para el proyecto web, es posible que también deba actualizar la configuración en 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>
THN
fuente
2

Debe cambiar todas las referencias a System.Web.Mvc dentro de su solución. Simplemente elimínelos y agregue la nueva versión 4.0.0.1.

También en las propiedades cambian copy locala verdadero.

Y en web.config agregue el enlace de ataque para apuntar a la nueva versión de 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>
Robert Benyi
fuente
El ajuste CopyLocal=trueno nos ayudó; ver: System.Web.MVCno copiado a la bincarpeta desde MS14-059
Danny Tuppeny
1

Bueno,

Para mí fueron dos pasos simples:

Primero cambié todas las referencias a System.Web.Mvc de 4.0.0.0 a 4.0.0.1,

Luego tuve que ir a las propiedades de System.Web.Mvc (posiblemente porque lo había eliminado y vuelto a agregar) y cambiar la copia local a verdadero.

Espero que esto sea útil para alguien.

edencorbina
fuente
0

Si aún recibe el mismo error después de probar la solución @Krzysztof o cualquiera de las otras respuestas anteriores, una solución que podría funcionar para usted es desinstalar MVC Runtime 4.0

Ricardo Sanchez
fuente