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?