Error extraño al actualizar ASP.NET MVC de 4 a 5

Estoy convirtiendo mi proyecto de MVC 4 a MVC 5 (y .Net 4 a .Net 4.5.2, que es el verdadero impulsor de los cambios).

Cuando ejecuto una de mis páginas obtengo este error (espacio en blanco agregado por mí para facilitar la lectura)

[A] System.Web.WebPages.Razor.Configuration.HostSection no se puede convertir a [B] System.Web.WebPages.Razor.Configuration.HostSection.

El tipo A se origina en ‘System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ en el contexto ‘Default’ en la ubicación ‘C: \ windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll ‘.

El tipo B se origina de ‘System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ en el contexto ‘Default’ en la ubicación ‘C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Archivos temporales ASP.NET \ studentportal3g \ 2204bad2 \ aece9b3b \ assembly \ dl3 \ ad80387c \ 91adbf51_fc73d101 \ System.Web.WebPages.Razor.dll ‘.

Cuando vi por primera vez, esto es así, ¡Ah fácil! No tanto 🙂

Revisé cada proyecto y me aseguré de que su versión se actualizara a MVC 5, que tiene la versión 3.0.0.0 de System.Web.WebPages.Razor.dll.

Limpie la reconstrucción, todavía obtiene el error. No hay problema, eliminaré los archivos temporales en caché.

Limpie la reconstrucción, todavía obtiene el problema. Vuelvo atrás, compruebo manualmente cada versión de System.Web.WebPages.Razor.dll, en las referencias de cada proyecto que tiene una referencia. Reviso mi carpeta donde copio dlls para hacer referencias a ellos manualmente, no está allí.

Si mi solución no contiene una copia de la DLL o una referencia a la DLL, y he eliminado manualmente las carpetas de caché en ‘C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporal ASP.NET

Archivos \ studentportal3g …

¿De dónde viene el viejo dll malo? ¿Cómo soluciono este error? ¿Cómo evito que vuelva a suceder?

Gracias,

Eric-

Visual Studio es una gran herramienta, pero no siempre toma las decisiones correctas cuando se trata de actualizar dependencias, ni admite todas las opciones posibles disponibles en MSBuild. Siempre que se encuentre en un enlace como este, debe revisar manualmente y (si es necesario) editar su archivo .csproj para resolverlo.

El problema no es que su archivo exista en el GAC o que NuGet no lo haya instalado, es muy probable que uno de sus archivos de proyecto tenga una referencia a la versión anterior de la versión System.Web.WebPages.Razor 1.0.0.0 , y necesita encontrar todas las referencias a él y cambiarlos a 3.0.0.0 consecuencia.

  1. Haga clic derecho en su nodo de proyecto en el Explorador de soluciones y haga clic en Unload Project .
  2. Haga clic derecho en el nodo del proyecto de nuevo y haga clic en Edit .csproj .
  3. Busque en el archivo las referencias a System.Web.WebPages.Razor y actualice la versión y HintPath consecuencia (como se muestra a continuación). Asegúrese de que HintPath que utiliza realmente apunta a un archivo existente.
  4. Repita estos pasos para todos los proyectos dependientes en la solución (y cualquiera que esté en archivos DLL que no sean parte de la solución).

Referencia antigua

  True ..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.WebPages.Razor.dll  

Referencia actualizada

  True ..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.Razor.dll  

También debe /Views/web.config archivos web.config y /Views/web.config para asegurarse de que no hacen referencia a ninguna versión anterior de este ensamblado.

NOTA: Si las instrucciones anteriores no resuelven su problema, es probable que el problema esté fuera de su solución. Lo más probable es que exista una biblioteca de terceros que haga referencia a la versión anterior del archivo en alguna parte. Si es así, podría intentar obtener una versión actualizada de la DLL.

Es posible que también desee verificar esta pregunta .

Parece que la DLL anterior está en el caché de ensamblados global (GAC). El GAC es un lugar donde puede almacenar ensamblajes a los que se puede hacer referencia desde varias aplicaciones en la máquina. Haga clic aquí para leer más sobre GAC.

Use la herramienta gacutil para actualizar el ensamblaje en el GAC.

La herramienta se encuentra en algún lugar debajo de la carpeta “Microsoft SDKs” en Archivos de progtwig. Para mí, estaba ubicado en

C: \ Archivos de progtwig (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.1 Tools \

Abre cmd y navega hasta el lugar donde guardé mi gacutil. Entonces úsalo así:

gacutil.exe -i [path to your assebly] -f .

El parámetro -i es para indicar dónde se encuentra su ensamblaje. El parámetro -f se usa para forzar una actualización del ensamblado, si ya estaba allí.

Ejemplo

Supongamos que su DLL se encuentra en

C: \ temp \ System.Web.WebPages.Razor.dll

Luego, ejecutará gacutil.exe -i "C:\temp\System.Web.WebPages.Razor.dll" -f