Подтвердить что ты не робот

Ошибка Razor intellisense: функция "метод расширения" не может использоваться, поскольку она не является частью спецификации языка ISO-2 С#

Цель:

  • Использовать шаблоны cshtml Razor для форматирования данных
  • Вставить cshtml шаблоны Razor в библиотеку классов как Embedded Resources
  • Использовать операторы Linq и методы расширения в шаблоне cshtml

Я создал новый проект библиотеки классов, а затем адаптировал

И я добавил файл web.config в корень проекта. Он содержит следующее:

<configuration>
<system.web>
  <compilation debug="true" targetFramework="4.0">
    <assemblies>
      <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Helpers, Version=1.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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
  </compilation>
  ...
  <pages>
    <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.Routing" />
      <add namespace="System.Web.WebPages" />
    </namespaces>
  </pages>
</system.web>
...
</configuration>

И вот ссылки на проект:

Project References

Библиотека классов имеет целевую структуру .NET Framework 4 и в разделе "Расширенные настройки сборки" версия языка установлена ​​на C# 3.0.

Update

Проект строит и работает правильно при использовании методов расширения и Linq. Это просто intellisense, который выдает ошибку.

4b9b3361

Ответ 1

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

Я получал ошибку:

'VSTS for Database Professionals Sql Server Data-level Application Application не загружен правильно

Я нашел ответ на в Microsoft Connect.

Как исправить

1) Запустите следующие инсталляторы из среды Visual Studio:

\ WCU\DAC\DACFramework_enu.msi

\ WCU\DAC\DACProjectSystemSetup_enu.msi

\ WCU\DAC\TSqlLanguageService_enu.msi

2) Перезапустите VS

Надеюсь, это может помочь кому-то другому.

Ответ 2

Я пробовал все решения этой ошибки, которые я мог найти везде в Интернете, и мне не повезло.

Я, наконец, получил эту ошибку, чтобы исчезнуть (и мой IntelliSense для работы), скопировав дополнительные блоки MVC-конфигурации из моего файла проекта web.config в файл моего проекта app.config.

Похоже, Visual Studio не уважает web.config(по крайней мере некоторые его части) в простом проекте библиотеки С#.

Мой файл app.config проекта выглядит следующим образом:

<appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
    <pages>
      <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.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Удачи.

Ответ 3

Ключом к решению этой проблемы является добавление следующего тега в ваш app.config или web.config

<system.web>
    <compilation debug="false" targetFramework="4.0" />
</system.web>

Ответ 4

Решением для меня было изменение типа проекта

1. Запустите проект

Проект 2.Edit

3. Добавьте строку ниже (в зависимости от версии MVC проекта) сразу после ProjectGuid

MVC 4

<ProjectTypeGuids>{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

MVC 3

<ProjectTypeGuids>{E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

@Matt

Попробуйте добавить это в Web.Config в корне проекта (не в папке Views)

<configuration>
...
 <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.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=3.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" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>


...  
</configuration>

Ответ 5

У нас была именно эта проблема в нашем Проекте сегодня - она ​​может быть реплицирована среди членов команды, поэтому проблема с установкой не была. Intellisense компилирует страницы в код 2.0, а не CS # 3.

Я отследил его до добавления веб-ссылки к проекту класса (используя MVCContrib, чтобы иметь его в качестве справочной библиотеки по http://lostechies.com/erichexter/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib/)

Вытащил WebReference и перевел его в другой проект и устранил проблему, взял немало охоты, поэтому надеюсь, что это поможет кому-то еще!

Ответ 6

Добавьте раздел "system.codedom" в ваш файл конфигурации (app.config в консольном приложении), например:

<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs;cshtml" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v4.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>