Установка 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 для сопоставлений)