En mi caso, tuve este problema solo en mi PC solo para un proyecto. Mi proyecto funcionó bien en VS2012, pero cuando se abrió en VS2017 tenía este problema.
El principal problema para mí aquí fue el caché. Mi proyecto apuntaba a las versiones anteriores en caché de dll para Razor y MVC y no encontraba características que se agregaron en versiones más nuevas, como ViewBag. ViewBag se agregó en la versión 3 de Razor, pero debido a que tenía la versión 2 de Razor en caché, no pudo encontrar ViewBag (pero pudo encontrar otras cosas que estaban presentes en la versión 2). Sin embargo, simplemente borrar el caché como en la respuesta aceptada no solucionó mi problema. Tuvimos que cambiar los archivos de configuración para decir "usar la versión 3 en lugar de 2" para Razor y "usar la versión 5 en lugar de 4" para MVC, luego cerrar VS, eliminar el caché y abrir el proyecto y reconstruir. Entonces las cosas se arreglaron. A continuación se muestran instrucciones más detalladas.
Aquí está la secuencia de cambios que me ayudaron a solucionar mi problema:
- En Web.config de la carpeta "Vistas", cambie todas las ubicaciones donde
- La versión de MVC se establece en 4.0.0.0 a 5.0.0.0
- La versión de Razor está configurada de 2.0.0.0 a 3.0.0.0
Aquí están esas líneas en mi caso:
<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
<section name="host" type="... Version=3.0.0.0 ..." .../>
<section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
...
pageParserFilterType="... Version=5.0.0.0 ..."
pageBaseType="... Version=5.0.0.0 ..."
userControlBaseType="... Version=5.0.0.0 ...">
<controls>
<add assembly="... Version=5.0.0.0 ..." ... />
</controls>
</pages>
(notas: 1) sus versiones pueden ser diferentes, solo estoy diciendo lo que se necesitaba hacer en mi caso 2) omití algunas cosas con "..." para abreviar 3) incluso si tiene una versión MVC similar a 5.3.2.0 aún debe ingresar 5.0.0.0, lo mismo con la versión de Razor: ingrese todos los ceros en 3.0.0.0)
En el archivo de configuración principal (el que está en el nivel superior) cambie webPages:version
de 2.0.0.0 a 3.0.0.0.
Este cambio probablemente no afectó la solución, pero aún lo mencionaré. Asegúrese de que la <namespaces>
sección de la carpeta "Vistas" tenga exactamente el mismo contenido que el archivo .conifg principal en la raíz del proyecto, algo como:
<namespaces>
<add namespace="System.Web.Helpers" />
<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="System.Web.WebPages" />
</namespaces>
- Finalmente, cierre VS. Elimine todos los archivos de caché en
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
(o cualquiera que sea su ruta correcta) tal como se sugiere en la respuesta (actualmente) aceptada por Fenton. También elimine el .scan
archivo, incluso si no se menciona en esa respuesta. Una vez que haya terminado, abra VS, limpie su proyecto y vuelva a construirlo. Las cosas deberían estar funcionando ahora. Funcionó para mí.