tutorial net mvc mezclar entre ejemplos diferencias asp .net asp.net-mvc versioning assembly-references assembly-binding-redirect

mezclar - El parche de seguridad ASP.NET MVC para la versión 3.0.0.1 rompe la compilación



web forms c# ejemplos (4)

Arreglé esto por:

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

sección de runtime web.config:

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

Cambiar la configuración de Copy Local incluirá el archivo System.Web.MVC.dll en la carpeta bin cuando publique 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 MVC 3 ha sido parcheado desde su lanzamiento. Debería poder volver a Copy Local a false una vez que se hayan actualizado los servidores. La próxima vez que Microsoft haga una actualización como esta, probablemente sabrán solucionar problemas como este primero.

Esta pregunta ya tiene una respuesta aquí:

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

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

Resharper no muestra ningún problema, pero la compilación falla con muchos tipos de MVC sin resolver y una advertencia:

Advertencia : no se pudo resolver esta referencia. No se pudo encontrar el ensamblado "System.Web.Mvc, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL". Verifique que el ensamblaje exista en el disco. Si su código requiere esta referencia, puede obtener errores de compilación.

Esto 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 compilació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 quiero aumentar el número de versión en todos los archivos * .csproj cada vez que se lanza una actualización MVC.

Varias versiones se ven afectadas por la actualización:

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

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



Lo que funcionó en mi caso fue cambiar el elemento de Reference en el archivo del proyecto para que Version=3.0.0.0 sea ​​ahora 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 dicho dll para que se recupere 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, incluyendo el proyecto de prueba).


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 una redirección de ensamblaje a la nueva versión, esto anulará todo lo que tenga en su web.config:

<?xml version="1.0"?> <!-- http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx#BKMK_Redirectingassemblyversionsbyusingpublisherpolicy --> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="3.0.0.0-3.0.0.1" newVersion="3.0.0.1"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>

Siga los consejos de @Guffa para su sistema de compilació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 deploy o GAC).