Rasoir intellisense d'erreur: "Fonction de la méthode d'extension' ne peut pas être utilisé car il ne fait pas partie de l'ISO-2 spécification du langage C#

Objectif:

  • Utilisation cshtml Razor modèles de données au format
  • Intégrer cshtml Rasoir modèles dans la Bibliothèque de la Classe comme Embedded Resources
  • Utilisation Linq états et les méthodes d'extension dans le cshtml modèle

J'ai créé un nouveau projet de bibliothèque de classes, puis adaptées Scott, Hanselman de l' instructions sur la façon d'intégrer MVC3 dans un WebForms application de l'obtenir pour fonctionner dans une Bibliothèque de Classe. Puis-je utiliser le package NuGet RazorEngine appliquer le modèle à un objet.

Jusqu'à présent, il fonctionne très bien, avec un hoquet: L'intellisense ne reconnaît pas Linq des déclarations ou des méthodes d'extension (une jolie partie importante de la MVC) lors de l'édition cshtml fichiers.

Donc pour la suite de cshtml fichier:

@model Customer[]

@Model.Count()

@if (Model.Where(customer => customer.Type == 'New').Any())
{
    <span>Found at least one new customer.</span>
}

...il affiche les erreurs suivantes:

Feature 'extension method' cannot be used because it is not part of the ISO-2 C# language specification

Feature 'lambda expression' cannot be used because it is not part of the ISO-2 C# language specification

Personne ne sait ce que je suis absent? Je vous remercie à l'avance, j'ai passé des heures à chercher la réponse à cette question.


Quelques détails supplémentaires

Ce qui suit est mon web.config dans le Vues dossier:

<?xml version="1.0"?>
<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>
  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler" />
    </httpHandlers>
    <pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

  <system.webServer>  ...  </system.webServer>
</configuration>

Et j'ai ajouté un web.config fichier à la racine du projet. Il contient les éléments suivants:

<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>

Et voici les références pour le projet:

Rasoir intellisense d'erreur:

La Bibliothèque de Classe a d'une cible cadre de .NET Framework 4 et en vertu de l'Avancée des Paramètres de génération, la Version de Langue est définie à C# 3.0.

Mise à jour

Le projet est construit et fonctionne correctement lors de l'utilisation de méthodes d'extension et de Linq. C'est juste l'intellisense qui génère l'erreur.

  • Avez-vous des system.codedom dans le fichier de configuration(s)?
  • Salut Marc, je n'ai pas de système.codedom élément dans les fichiers de config. Est-il nécessaire?
  • non; au contraire, le site web par défaut.config doit gérer cela; j'étais juste une question, il peut y être rendant l'utilisation de C# 2.0
  • Vérifiez votre build/propriétés du Projet, je suis curieux de savoir si il y a de toute règle ou de fxcop l'intégration de la force 2.0 spec?
  • Je ne peux pas trouver quoi que ce soit dans la composition ou les propriétés du projet qui pourraient être forcer 2.0... Vérifié la source de l' .vsproj fichier, en vain.
InformationsquelleAutor Matt | 2011-12-19