El parche de seguridad ASP.NET MVC a la versión 3.0.0.1 rompe la comstackción

Después de instalar la actualización de seguridad ASP.NET MVC 3 KB2990942 , parece que la versión de MVC aumentó de 3.0.0.0 a 3.0.0.1 . Esto hace que Visual Studio ya no encuentre la referencia.

  

Resharper no muestra ningún problema pero la construcción falla con muchos tipos de MVC no resueltos y una advertencia:

Advertencia : no se pudo resolver esta referencia. No se pudo ubicar el ensamblado “System.Web.Mvc, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL”. Verifique para asegurarse de que el ensamblaje exista en el disco. Si el código requiere esta referencia, es posible que obtenga errores de comstackción.

Este tipo de tiene sentido. Esta versión ya no existe en mi máquina.

No puedo garantizar la versión exacta de MVC en máquinas de desarrollo, servidores de comstackción y servidores de producción. Pueden tener 3.0.0.0 o 3.0.0.1 y esto puede cambiar en cualquier momento. Windows Update podría lanzar nuevas versiones de MVC en cualquier momento. Además, no deseo boost el número de versión en todos los archivos * .csproj cada vez que se lanza una actualización de MVC.

Varias versiones se ven afectadas por la actualización:

  • KB 2993939: Actualización de seguridad para Microsoft ASP.NET MVC 2
  • KB 2993937: Actualización de seguridad para Microsoft ASP.NET MVC 3
  • KB 2993928: Actualización de seguridad para Microsoft ASP.NET MVC 4.0
  • KB 2992080: Actualización de seguridad para Microsoft ASP.NET MVC 5.0

El boletín de seguridad: MS14-059: una vulnerabilidad en ASP.NET MVC podría permitir la omisión de la característica de seguridad (2990942)

¿Cuál es la mejor manera de lidiar con esta situación? ¿Cómo puedo desensamblar la construcción y producción y estar a salvo con respecto a futuras actualizaciones de MVC?

Lo arreglé por:

  • Eliminando la referencia de MVC y agregando la referencia correcta al proyecto.
  • Cambiar la propiedad Copy Local de la referencia a true .
  • Actualice la configuración de bindingRedirect en web.config :

web.config runtime section:

       ... 

Cambiar la configuración Copy Local incluirá el archivo System.Web.MVC.dll en la carpeta bin al publicar el proyecto, para que funcione incluso si el servidor no se actualiza con la nueva versión.

Tenga en cuenta que las actualizaciones como esta rara vez ocurren. Esta es la primera vez que se revisa MVC 3 desde su lanzamiento. Debería poder cambiar Copy Local a false una vez que los servidores se hayan actualizado. La próxima vez que Microsoft haga una actualización como esta, probablemente sabrá solucionar problemas como este primero.

Instalé el paquete Microsoft.AspNet.Mvc en mi proyecto usando Nuget.

 Install-Package Microsoft.AspNet.Mvc -Version  -Project PROJECTNAME MVC 4 version: 4.0.40804.0 MVC 3 version: 3.0.50813.1 

Esto solucionó el problema. Detalles aquí: http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Su sistema de producción debería estar bien, ya que la revisión entrega un archivo de configuración ( System.Web.Mvc.dll.config ) en la siguiente carpeta:

 %SystemRoot%\assembly\GAC_MSIL\policy.3.0.System.Web.Mvc\3.0.0.1__31bf3856ad364e35 

El archivo de configuración contiene un conjunto de redirigir a la nueva versión, esto anulará todo lo que tenga en su web.config:

 < ?xml version="1.0"?>            

Siga los consejos de @Guffa para su sistema de comstackción, o use nuget para actualizar. Creo que la solución que funciona depende de cómo entregue los binarios MVC a su sistema (ya sea bin deployment o GAC).

Lo que funcionó en mi caso fue cambiar el elemento de Reference en el archivo del proyecto, por lo que Version=3.0.0.0 ahora es Version=3.0.0.1 . También actualicé el archivo System.Web.Mvc.dll que se encuentra en la carpeta _bin_deployableAssemblies a la nueva versión y agregué un elemento HintPath en el elemento de Reference que apunta a dicha dll para que se recoja incluso cuando en GAC todavía tenemos la versión 3.0.0.0.

La parte difícil es no olvidar actualizar la referencia en todos los proyectos que hacen referencia a System.Web.Mvc (por ejemplo, incluido el proyecto de prueba).