Falta System.web.mvc

89

Tenemos una aplicación web ASP.NET MVC 3 antigua, construida en VS2010, que no se puede compilar desde la actualización de seguridad de la semana pasada.

El problema es que la referencia a System.Web.Mvc.dll está rota.

Cuando abro el archivo de solución en nuestra máquina de compilación, donde no se ha ejecutado la actualización de seguridad, y abro el cuadro de diálogo de propiedades para Referencias-> System.Web.MVC, se ve bien.

La ruta es C: \ Archivos de programa \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll La versión es 3.0.0.0

Pero cuando abro el archivo de la solución en una máquina de desarrollo donde se ha ejecutado la actualización de seguridad, References-> System.Web.MVC está marcado como perdido. Si lo elimino e intento volver a agregarlo usando el cuadro de diálogo Agregar referencia de VS2010, no se muestra.

Deambular por la web me ha llevado a sugerencias relacionadas con la actualización de MVC con NuGet. No usamos NuGet, en nuestros proyectos VS2010, por lo que no parece del todo correcto para esta situación. Lo intenté de todos modos y terminé con media docena de referencias faltantes.

Cuando miro las propiedades de "C: \ Archivos de programa \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" en el Explorador de Windows, en la máquina de compilación veo la versión 3.0.0.0.

Cuando miro las propiedades en la máquina de desarrollo, veo la versión 3.0.50813.1.

Lo que necesito es una forma de cambiar la forma en que construyo y ejecuto para poder construir y ejecutar independientemente de cuál de estas dos DLL esté instalada en el marco .NET 3.0.

Ideas?

Lo que probé que no funcionó

Primer intento: si falta el ensamblaje, agréguelo. Eliminé la antigua referencia que faltaba. Luego copié la DLL de la carpeta "ASP.NET MVC3 \ Assemblies" a una carpeta de mi proyecto. Configúrelo como "Copiar siempre" y agréguelo como referencia.

Con eso, el proyecto se compilaría en VS2010, pero cuando intentaba precompilar las páginas con aspnet_compiler, recibía advertencias:

(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy

Hasta ahora, he podido evitar comprender las políticas de tiempo de ejecución, pero intenté agregar esto, en 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>
    </assemblyBinding>
</runtime>

Lo intenté de nuevo y obtuve las mismas advertencias.

Mi pregunta es: ¿todavía tengo algún problema? ¿O lo resolveré yo, a pesar de las advertencias?

Jeff Dege
fuente
¿Ha intentado actualizar todos los paquetes nuget a su última versión (siempre que sea posible, por supuesto)?
Silvermind
1
Me pregunto si se está encontrando con el error de actualización MS14-059 ...
Steven V
1
La aplicación web no tiene paquetes nuget. Y sí, es el error MS14-059.
Jeff Dege
Tengo lo que parece el mismo problema, aunque estoy usando el paquete nuget y la versión 4 en su lugar. Se compila bien y todo funciona, pero hay más de 20 advertencias de compilación de las que me gustaría deshacerme.
Farinha

Respuestas:

141

Obtenga la última versión de MVC3 a través de NuGet. Abra su proyecto en Dev Studio. Abra la pestaña Package Manager Console en la parte inferior de Dev Studio. Entonces usa este comando:

PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

Si hace clic en la tecla de tabulación después de "-Version", obtendrá una lista de todas las versiones disponibles.

Si tiene una versión anterior de NuGet, es posible que reciba un error que le indique que debe actualizarla. Si es así, abra Herramientas-> Administrador de extensiones para instalar la última versión de NuGet. Tenga en cuenta que deberá ejecutar Dev Studio como administrador antes de poder instalar NuGet.

La instalación de MVC3 debería actualizar Web.config en su proyecto.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.1" />
  </dependentAssembly>
</assemblyBinding>
3punto
fuente
1
¡¡¡¡Bada Bing!!!! Pasé horas en esto ... lo suficientemente simple como para instalar la versión en Nuget pm .... ¡muchas gracias!
Squ1rr3lz
Sí, Nuget funciona con Visual Studio 2010. Solo tiene que instalarlo a través de Extension Manager. En el menú Herramientas.
puntos
2
Install-Package Microsoft.AspNet.Mvc solucionaría el problema. Realmente no necesitamos mencionar el número de versión
sujay kodamala
2
@sujaykodamala La configuración del número de versión es importante si desea instalar la última MVC3 y no MVC5 (la última versión del paquete).
3punto
Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstalles más explícito, instala la versión que tienes para ese proyecto y evita que toque otros proyectos (si lo deseas).
Mike E
30

MVC 5

C: \ Archivos de programa (x86) \ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll

MVC 4

C: \ Archivos de programa (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll

MVC 3

C: \ Archivos de programa (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll

MVC 2

C: \ Archivos de programa (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

¿Dónde puedo encontrar la dll System.Web.MVC en un sistema donde está instalado MVC 3?

iglesia
fuente
Gracias, esto me ayudó a abrir el proyecto dirigido a VS2010 en el año 2018 :)
Aamol
23

La forma más sencilla de resolver este problema es instalar ASP.NET MVC 3 desde el instalador de plataformas web.

ingrese la descripción de la imagen aquí

http://www.microsoft.com/web/downloads/

O usando el comando Nuget

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
Md. Alim Ul Karim
fuente
1
Esto resolvió mi problema que surgió después de que cambié a una nueva PC y tuve un proyecto con referencias a ASP.NET MVC 4 dll que aún no había instalado en la nueva máquina.
clovola
3

en VS 2017 limpié la solución y la reconstruí y eso la arregló

PBMe_HikeIt
fuente
2

Tengo la misma situación: Visual Studio 2010, sin NuGet instalado y una aplicación ASP.NET que usa System.Web.Mvc versión 3.

Lo que funcionó para mí fue configurar cada proyecto de C # que usa System.Web.Mvc, para ir a Referencias en el Explorador de soluciones y configurar las propiedades en System.Web.Mvc, con Copiar local en verdadero y Versión específica en falso - el último hizo que el campo Versión mostrara la versión actual en esa máquina.

Dronz
fuente
1

Tuve este problema en vs2017, ya obtuve MVC a través de nuget pero System.Web.Mvc no apareció en la lista "Ensamblados" en "Agregar referencia".

La solución fue seleccionar "Extensiones" en "Ensamblados" en el cuadro de diálogo "Agregar referencia".

t_warsop
fuente
0

En mi caso, tenía todas las referencias adecuadas en mi proyecto. Descubrí que al crear la solución, los paquetes nuget se restauraban automáticamente.

cal5barton
fuente
0

La muestra mvcmusicstore.codeplex.com abierta en vs2015 perdió algunas referencias, una de ellas System.web.mvc.

La solución para esto fue eliminarlo de las referencias y agregar una referencia: elija Extensiones en Ensamblados, allí puede encontrar y agregar System.Web.Mvc.

(Los otros ensamblados que agregué con los paquetes nuget).

Bob Lokerse
fuente
0

En caso de que alguien esté en una posición en la que obtenga el mismo error. En mi caso, degradar Microsoft.AspNet.Mvc y luego actualizarlo nuevamente ayudó. Tuve este problema después de instalar Glimpse y eliminarlo. System.Web.Mvc tenía referencias incorrectas de alguna manera, limpiar la solución o reconstruirla no funcionó en mi caso. Pruébelo si ninguna de las respuestas anteriores funciona para usted.

Mehmet Can Erim
fuente
0

Agregue la referencia nuevamente desde ./packages/Microsoft.AspNet.Mvc.[version]/lib/net45/System.Web.Mvc.dll

Sajithd
fuente