Ошибка 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
.
Проект строит и работает правильно при использовании методов расширения и Linq. Это просто intellisense, который выдает ошибку.
Ответы
Ответ 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>