visual studio para net mvc for descargar asp asp.net asp.net-mvc windows-update

asp.net - para - download mvc 4 for visual studio 2017



DespuĆ©s de la actualizaciĆ³n de Windows "El tipo o nombre de espacio de nombres ''Html'' no existe en el espacio de nombres ''System.Web.Mvc''" (7)

  1. Puede ir a Referencias del proyecto actual.
  2. Haga clic derecho en dll System.Web.Mvc y elija Propiedades
  3. Se abrirá una ventana de Propiedades.
  4. Cambiar copia local a True

Hice una actualización de Windows y luego mi aplicación asp.net mvc 5 ya no se cargará quejándose de

CS0234: The type or namespace name ''Html'' does not exist in the namespace ''System.Web.Mvc''

indicando mis vistas web.config tiene la culpa

<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> <add namespace="Ogre.Extensions" /> <add namespace="Newtonsoft.Json"/> </namespaces> </pages> </system.web.webPages.razor>

Ahora esto es muy confuso. En mi proyecto en sí, puedo ver el espacio de nombres Html , abriendo mi ensamblaje en ILSpy, puedo navegar al System.Web.Mvc enlazado y también puedo verlo, y el registro de fusión no muestra ningún error de enlace sospechoso.

Es como si solo mis vistas estuvieran vinculadas (con éxito) a una versión anterior de Mvc. ¿Por qué sucedería eso alguna vez? ¿Cómo puedo arreglarlo?

Permítanme aclarar que no ha habido configuración o incluso cambios de código. Todo esto está en mi máquina de desarrollo en IISExpress. Se estaba ejecutando, hice la actualización y reinicié y ahora ya no se está ejecutando.

Aquí están mis instalaciones recientes de la actualización. Podría comenzar a eliminarlos uno por uno, pero quiero saber qué está sucediendo realmente, ya que parece que me falta parte de la historia.


Además de configurar CopyLocal=true en la referencia del proyecto, es posible que también necesite cambiar el archivo Web.Config de esta manera ...

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

Agregué culture="neutral" también, y todo esto resolvió el problema.


Además de configurar CopyLocal = true en la referencia del proyecto, es posible que también necesite cambiar el archivo Web.Config de esta manera ...

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

Observe la nueva versión = "4.0.0.1". Esto funcionó para mí, y espero que también ayude a algunas personas.

Guarda la actualización del marco MVC en cualquier servidor de prueba / producción.

Saludos Microsoft. ¡Eres la mejor!

¡Tu intento de hacerme parecer incompetente frente a mis clientes ha sido frustrado una vez más!


Establecer CopyLocal = true no ayudó. Limpiar la solución, luego cerrarla y volver a abrirla funcionó nuevamente. Es posible que también deba cerrar toda la instancia de Visual Studio.


Esto parece haber sido causado por una actualización de Windows ( KB2990942 ) para reparar la vulnerabilidad de seguridad MS14-059 , lo que permite eludir las funciones de seguridad. Nuestras compilaciones dejaron de funcionar en nuestro servidor de compilación después de instalar Windows Update, y la actualización de los archivos csproj para usar 4.0.0.1 para la referencia System.Web.Mvc solucionó el problema.

La descripción de Microsoft de la vulnerabilidad es:

La vulnerabilidad podría permitir eludir la función de seguridad si un atacante convence a un usuario de hacer clic en un enlace especialmente diseñado o visitar una página web que contiene contenido especialmente diseñado para aprovechar la vulnerabilidad. En un escenario de ataque basado en la web, un atacante podría alojar un sitio web especialmente diseñado que está diseñado para aprovechar la vulnerabilidad a través de un navegador web y luego convencer a un usuario para que vea el sitio web. El atacante también podría aprovechar sitios web comprometidos y sitios web que aceptan o alojan contenido o anuncios proporcionados por el usuario. Estos sitios web podrían contener contenido especialmente diseñado que podría explotar la vulnerabilidad. Sin embargo, en todos los casos, un atacante no tendría forma de obligar a los usuarios a ver el contenido controlado por el atacante. En cambio, un atacante tendría que convencer a los usuarios para que tomaran medidas, generalmente haciendo que hagan clic en un enlace en un mensaje de correo electrónico o en un mensaje de Instant Messenger que los lleve al sitio web del atacante, o haciendo que abran un archivo adjunto enviado por correo electrónico .


Esto se rompió para cualquier usuario sin CopyLocal=true (o, en MSBuild speak, <Private>True</Private> ) por MS14-059 . Las plantillas MVC establecen <Private>True</Private> de manera predeterminada, pero si usa NuGet para actualizar la versión MVC, pierde esa configuración (vea el error NuGet # 4344 ).

Hay dos aspectos del problema:

  1. Razor no incluye una referencia a MVC de manera predeterminada, por lo que su compilación no funcionará a menos que exista alguna versión de la DLL de MVC en su carpeta bin.
  2. Si implementa en una máquina separada que no tiene esta actualización instalada, la DLL MVC ya no se incluye en su salida, por lo que falta MVC.

Estás viendo el problema # 1. Para resolver ambos problemas, recomendaría realizar los dos cambios siguientes:

  1. Agregue la siguiente configuración a Views / Web.config:

    <system.web> <compilation> <assemblies> <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </assemblies> </compilation> </system.web>

  2. Establezca CopyLocal=true en la interfaz de usuario de VS para la referencia del proyecto, o agregue manualmente la siguiente línea a continuación en la Reference en su archivo .csproj:

    <Private>True</Private>

Por lo tanto, su referencia completa debería ser similar a la siguiente:

<Reference Include="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Private>True</Private> <HintPath>../../packages/Microsoft.AspNet.Mvc.5.0.0/lib/net45/System.Web.Mvc.dll</HintPath> </Reference>

Tenga en cuenta que NuGet eliminará la configuración CopyLocal / Private si actualiza los paquetes nuevamente en el futuro. (Por ejemplo, si actualiza a MVC 5.2 hoy). Si esa versión de MVC es alguna vez GAC, el problema n. ° 1 anterior no se repetirá mientras haya agregado la configuración en el paso A anterior, pero el problema n. ° 2 podría volver a ocurrir. Para garantizar que esto no suceda en el futuro, recomendaría configurar manualmente CopyLocal a verdadero cada vez que realice una actualización del paquete NuGet.


Santa mierda, gracias a @ Nevada-Williford por la pista. Al entrar y configurar mi referencia System.Web.Mvc a <Private>True</Private> (Copy Local = True) lo arregló. Tenga en cuenta que antes de la actualización todo funcionaba, después de la actualización tuve que modificar mi csproj para que volviera a funcionar.

Teoría de trabajo sobre lo que está sucediendo:

Copy Local = True y <Private>True</Private> solía ser casi, pero no exactamente, la misma cosa. La primera era una configuración de Visual Studio, la segunda una configuración de msbuild. Si la configuración de msbuild estuviera ausente, se aplicaría la configuración de Visual Studio (siempre que estuviera en VS). En esta actualización, creo que lo cambiaron, por lo que Copy Local solo refleja el atributo de presencia.

En nuestro proyecto no tenemos ese atributo establecido explícitamente, pero Copy Local = True antes de la actualización System.Web.Mvc.dll se copia en el directorio bin. Después de la actualización, dado que falta el atributo, Copy Local muestra False y debe establecerlo en True para asegurarse de obtener una copia local.

La configuración manual de Copy Local = True (o agregar ese elemento xml a msbuild) soluciona el problema.

Editar: Si bien esta parece ser la respuesta a la pregunta específica, cualquiera que venga aquí debería leer el hilo de comentarios y otras respuestas, especialmente de dmatson, para obtener más contexto, advertencias y errores relacionados.