Синтаксис Razor выдает ошибки в представлении перед компиляцией (нет intellisense)

Я просматривал список пакетов NuGet и обновлял все такие вещи, как bootstrap, jQuery и т. д., но пока я это делал, я бездумно обновил Microsoft.Owin и еще один пакет (возможно, это был EF или что-то еще), и это было обновление основной версии... упс.

Мне пришлось прыгать через обручи, удалив свой проект, получив более старую версию из системы управления версиями и вернув все к правильным версиям. Все возвращается на круги своя, и у меня есть последняя проблема. Синтаксис Razor.

Когда я открываю любое из своих представлений... в любом месте проекта, я получаю следующее: введите здесь описание изображения

Обратите внимание, что все, что использует Razor, помечено красной волнистой линией ошибки. Каждый из них говорит "Имя '' не существует в текущем контексте".

Когда я закрываю файл, никаких ошибок не отображается. Кроме того, когда я запускаю проект, проблем нет, и все работает ИДЕАЛЬНО. Проблема в том, что у меня нет intellisense, и он не распознает ни одного из моих помощников по бритве.

Вот характеристики моего проекта:

EntityFramework 6.0
Microsoft.Owin 2.1.0.0
Owin 1.0.0
System.Web.Mvc 5.2.2.0
System.Web.Razor 3.0.0.0

В моей папке пакетов у меня также есть:

Microsoft.AspNet.Mvc.5.2.2
Microsoft.AspNet.Razor.3.2.2
Microsoft.WebPages.3.2.2

Я изменил свой WebConfig, чтобы исправить несколько ошибок, и теперь в нем есть следующий код:

<compilation debug="true" targetFramework="4.5.1">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>

и ниже: <runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

У меня есть это:

<dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.AspNet.Identity.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="3.0.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
      </dependentAssembly>

И в каждой из папок просмотра в моем проекте у меня есть следующий код внутри файла Web.Config:

<configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

Вместе с этим кодом:

    <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <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="IcapOrg" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

Я пытался удалить его, переустановить, обновить, понизить версию, удалить и добавить сборки и многое другое, о чем я начал забывать. Я не совсем уверен, куда двигаться дальше. Я могу продолжать кодировать, но без IntelliSense это будет настоящая боль. Спасибо заранее за любую помощь.


person Termato    schedule 19.09.2014    source источник
comment
Вы используете ReSharper? R# выдавал мне ошибки Razor, пока я не обновил пакет Resharper.ExternalAnnotations до версии 8.2.2001.1. Вы можете получить доступ к расширениям через пункт меню ReSharper › Extension Manager....   -  person Andy Nichols    schedule 22.09.2014
comment
Я не использую ReSharper. Спасибо за вопрос!   -  person Termato    schedule 22.09.2014


Ответы (2)


После нескольких дней поиска я наконец нашел эту страницу: представление MVC Razor Intellisense не работает в VS 2013/2015/2017

В моем файле Views > Web.Config я нашел этот код:

 <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Helpers"/>
        <add namespace="IcapOrg" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

Который, как вы можете видеть, имеет неправильную версию MVC. Раньше я проверял только теги <sectionGroup> для правильной версии RAZOR, но я пренебрегал тем фактом, что MVC также нужна правильная версия. Переключение версии на:

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Решил мою проблему. Это напоминает мне всегда ОЧЕНЬ внимательно просматривать мой код.

ПРИМЕЧАНИЕ. Как видно из вопроса, в версии указано 5.0.0, а в этой — 4.0.0. У разных файлов Web.Config в разных папках просмотра были записаны разные версии. Очень странно.

person Termato    schedule 22.09.2014
comment
Действительно странно. Нам пришлось сделать наоборот и использовать в качестве версии 5.0.0.0 вместо 5.2.0.0, как мы на самом деле используем... - person Simon Bengtsson; 25.01.2015

Я провел дни, копаясь в этой проблеме, и теперь жду, когда мои волосы отрастут. Но увы настойчивость.

Visual Studio 2013, обновление 4, targetFramework 4.5.1 System.Web.Mvc 5.2.2.0

Убедитесь, что в файлах web.config (в корневом каталоге и каталоге представления) используются правильные версии для mvc и razor, как описано выше. Однако, если проблема razor intellisense все еще существует, начните с проверки установленных пакетов.

Самый простой способ — создать новое решение и устанавливать/обновлять пакеты один за другим, чтобы идентифицировать проблемные пакеты.

В моем случае обновление пакетов решения Webgrease/Modernizr/ANTLRv3 через nuget до версии 1.6.0/2.8.3/3.5.0.2 вызвало все проблемы и самоиндуцированное мужское облысение.

person William Black    schedule 05.01.2015