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?
fuente
Respuestas:
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>
fuente
Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstall
es más explícito, instala la versión que tienes para ese proyecto y evita que toque otros proyectos (si lo deseas).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?
fuente
La forma más sencilla de resolver este problema es instalar ASP.NET MVC 3 desde el instalador de plataformas web.
http://www.microsoft.com/web/downloads/
O usando el comando Nuget
Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
fuente
en VS 2017 limpié la solución y la reconstruí y eso la arregló
fuente
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.
fuente
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".
fuente
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.
fuente
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).
fuente
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.
fuente
Agregue la referencia nuevamente desde ./packages/Microsoft.AspNet.Mvc.[version]/lib/net45/System.Web.Mvc.dll
fuente