У моєму випадку ця проблема траплялася лише на моєму ПК лише для одного проекту. Мій проект справно працював у VS2012, але при відкритті у VS2017 у нього була ця проблема.
Основним питанням для мене тут був кеш. Мій проект вказував на старіші кешовані версії dll для Razor та MVC, і він не знаходив функцій, доданих у новіших версіях, таких як ViewBag. ViewBag був доданий у версію Razor 3, але оскільки у мене була кешована версія 2 Razor, він не зміг знайти ViewBag (але міг знайти інші речі, які були у версії 2). Однак просто очищення кешу, як у прийнятій відповіді, не вирішило моєї проблеми. Нам довелося змінити конфігураційні файли, щоб сказати "використовувати версію 3 замість 2" для Razor і "використовувати версію 5 замість 4" для MVC, потім закрити VS, видалити кеш, відкрити проект і відновити. Потім все виправилось. Нижче наведено більш докладні інструкції.
Ось послідовність змін, які допомогли мені вирішити проблему:
- У папці "Views" Web.config змініть усі місця, де
- Версія MVC встановлена на 4.0.0.0 - 5.0.0.0
- Версія Razor встановлена на 2.0.0.0 - 3.0.0.0
Ось такі рядки в моєму випадку:
<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>
(примітки: 1) ваші версії можуть бути різними, я просто розповідаю, що потрібно було зробити в моєму випадку 2) Я пропустив деякі речі з "..." для стислості 3) навіть якщо у вас версія MVC приблизно на зразок 5.3.2.0 ви все одно повинні ввести 5.0.0.0, те саме з версією Razor - ввести всі нулі в 3.0.0.0)
У головному конфігураційному файлі (на верхньому рівні) змініть значення webPages:version
з 2.0.0.0 на 3.0.0.0.
Ця зміна, ймовірно, не вплинула на рішення, але я все одно згадаю про це. Переконайтеся, що <namespaces>
розділ папки "Views" має такий самий вміст, як основний файл .conifg у корені проекту, приблизно так:
<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>
- Нарешті, закрийте VS. Видаліть усі файли кеш-пам’яті
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
(або будь-який ваш правильний шлях) так само, як це запропоновано у (на даний момент) прийнятій відповіддю Фентона. Також видаліть .scan
файл, навіть якщо він не згадується у цій відповіді. Закінчивши, відкрийте VS, очистіть свій проект і відновіть його. Зараз справи повинні працювати. У мене це спрацювало.