В моем случае эта проблема возникала только на моем ПК только для одного проекта. Мой проект отлично работал в VS2012, но при открытии в VS2017 возникла эта проблема.
Основной проблемой для меня здесь был кеш. Мой проект указывал на более старые кешированные версии dll для Razor и MVC и не находил функций, которые были добавлены в более новых версиях, таких как ViewBag. ViewBag был добавлен в Razor версии 3, но поскольку у меня был кэширован Razor версии 2, он не мог найти ViewBag (но мог найти другие вещи, которые присутствовали в версии 2). Однако простая очистка кеша, как в принятом ответе, не устранила мою проблему. Нам пришлось изменить файлы конфигурации, чтобы сказать «использовать версию 3 вместо 2» для Razor и «использовать версию 5 вместо 4» для MVC, затем закрыть VS, удалить кеш, открыть проект и перестроить. Потом все наладилось. Ниже приведены более подробные инструкции.
Вот последовательность изменений, которые помогли мне решить мою проблему:
- В 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>
раздел папки «Просмотры» имеет то же содержимое, что и основной файл .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, очистите свой проект и перестройте его. Теперь все должно работать. У меня это сработало.