No meu caso, esse problema estava acontecendo apenas no meu PC para apenas um projeto. Meu projeto funcionou bem no VS2012, mas quando aberto no VS2017 estava com esse problema.
O principal problema para mim aqui era o cache. Meu projeto estava apontando para as versões em cache mais antigas da dll para Razor e MVC e não estava encontrando recursos que foram adicionados em versões mais recentes, como o ViewBag. O ViewBag foi adicionado no Razor versão 3, mas como eu tinha o Razor versão 2 em cache, ele não conseguiu encontrar o ViewBag (mas conseguiu encontrar outras coisas que estavam presentes na versão 2). No entanto, simplesmente limpar o cache, como na resposta aceita, não resolveu meu problema. Tivemos que mudar os arquivos de configuração para dizer "use a versão 3 em vez de 2" para o Razor e "use a versão 5 em vez de 4" para MVC, fechando o VS, removendo o cache e abrindo o projeto e reconstruindo. Então as coisas foram consertadas. Abaixo estão instruções mais detalhadas.
Aqui está a sequência de mudanças que me ajudaram a resolver meu problema:
- No Web.config da pasta "Views", altere todos os locais onde
- A versão MVC está definida para 4.0.0.0 a 5.0.0.0
- A versão do Razor está definida para 2.0.0.0 a 3.0.0.0
Aqui estão essas linhas no meu 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) suas versões podem ser diferentes, estou apenas dizendo o que precisava ser feito no meu caso 2) Eu omiti algumas coisas com "..." por brevidade 3) mesmo se você tiver uma versão MVC algo como 5.3.2.0 você ainda deve inserir 5.0.0.0, o mesmo que a versão do Razor - insira todos os zeros em 3.0.0.0)
No arquivo de configuração principal (aquele no nível superior), mude webPages:version
de 2.0.0.0 para 3.0.0.0.
Essa mudança provavelmente não afetou a solução, mas ainda vou mencioná-la. Certifique-se de que a <namespaces>
seção da pasta "Visualizações" tenha exatamente o mesmo conteúdo do arquivo .conifg principal na raiz do projeto, 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, feche o VS. Exclua todos os arquivos de cache em
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
(ou qualquer que seja o seu caminho correto), assim como é sugerido na (atualmente) resposta aceita por Fenton. Exclua também o .scan
arquivo, mesmo que não esteja mencionado na resposta. Quando terminar, abra o VS, limpe seu projeto e reconstrua-o. As coisas devem estar funcionando agora. Funcionou para mim