Установка VS2012 (включая MVC4) нарушает существующее приложение ASP.NET MVC 3
После установки VS2012 и здесь MVC 4 у меня есть приложение MVC3, которое теперь терпит неудачу со следующей ошибкой времени выполнения:
Метод не найден: 'System.Collections.Generic.Dictionary`2 System.Web.Razor.Parser.CSharpCodeParser.get_RazorKeywords()'.
Если я создаю новый проект ASP.NET MVC 3 в VS2010, он работает нормально с видами бритв. Кто-нибудь еще сталкивался с подобными проблемами?
Ответы
Ответ 1
@Levi это было в Web.config в корне проекта.
В моем web.config я заметил этот блок, который я сейчас прокомментировал, и теперь эта ошибка больше не происходит:
<dependentAssembly>
<assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
Ответ 2
Это документированное поведение. VS2012 устанавливает MVC4.
Пожалуйста, прочитайте раздел "Установка ASP.NET MVC 4 разбивает приложения ASP.NET MVC 3 RTM" из ссылки
http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253815
Конкретная причина ошибки заключается в том, что шаблоны проектов в ASP.NET MVC 3 не указали, какую версию Razor использовать, поэтому по умолчанию она берет новейшую версию Razor, хотя MVC 3 совместим только с Razor v1.
- MVC 3 совместим только с Razor v1
- MVC 4 совместим только с Razor v2
Итак, исправление, как описано в примечаниях к выпуску MVC4, заключается в изменении файла web.config приложения MVC 3 для использования Razor v1.
Все новые шаблоны проектов (включая MVC3) будут правильно установлены. Только более старые приложения не имеют этой настройки.
Ответ 3
Я работал над старым проектом с использованием MVC 3 в Visual Studio 2015.
По какой-то причине был установлен Razor v2, и у меня была ошибка, описанная OP:
Метод не найден: 'System.Collections.Generic.Dictionary`2 System.Web.Razor.Parser.CSharpCodeParser.get_RazorKeywords()'.
Сначала я попробовал ответ OP, и я прокомментировал пару строк в Web.Config
. Но он создал эту ошибку:
Не удалось загрузить файл или сборку "System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" или одну из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку.
Затем я увидел еще один ответ на этом посту о возможной несовместимости между MVC 3 и Razor v2. Я просто обновил ASP.NET MVC с помощью следующей команды в консоли диспетчера пакетов:
Update-Package Microsoft.AspNet.Mvc
... и все снова начало работать!
Ответ 4
В общем случае Mvc3 не поддерживается после VS2010, я использую VS2010SP1 btw.
Вы можете заставить его работать, но он укусит вас в конце.
Поэтому я рекомендую выбирать соответствующие версии VS и MVC (проверьте официальный сайт Microsoft для сопоставлений)