Objetivo:

  • Uso cshtml Razor plantillas para dar formato a los datos
  • Incrustar cshtml de Afeitar plantillas en la Biblioteca de Clase como Embedded Resources
  • Uso Linq declaraciones y los métodos de extensión en el cshtml plantilla

He creado un nuevo proyecto de biblioteca de clases, a continuación, adaptado Scott Hanselman del instrucciones sobre cómo integrar MVC3 en un WebForms aplicación para que funcione en una Biblioteca de Clase. Entonces yo uso el paquete de NuGet RazorEngine aplicar la plantilla a un objeto.

Hasta ahora funciona muy bien, con un hipo: El intellisense no reconocer Linq declaraciones o los métodos de extensión (una muy importante parte de la MVC) cuando la edición de cshtml archivos.

Así que para la siguiente cshtml de archivo:

@model Customer[]

@Model.Count()

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

…muestra los siguientes errores:

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

¿Alguien sabe a qué me estoy perdiendo? Gracias de antemano–me he pasado horas buscando la respuesta a esta.


Algunos detalles adicionales

La siguiente es mi web.config en el Vistas carpeta:

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

Y he añadido un web.config archivo a la raíz del proyecto. Contiene los siguientes:

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

Y aquí están las referencias para el proyecto:

Maquinilla de afeitar de intellisense de error: Función de 'método de extensión' no se puede utilizar porque no es parte de la ISO-2 especificación del lenguaje C#

La Biblioteca de Clase tiene un objetivo marco de .NET Framework 4 y en Avanzado Configuración de generación, la Versión de Idioma se establece en C# 3.0.

Actualización

El proyecto se compila y se ejecuta correctamente cuando se utilizan los métodos de extensión y Linq. Es sólo el intellisense que se produce el error.

  • ¿Tienes alguna system.codedom en el archivo de configuración(s)?
  • Hola Marc, yo no disponen de un sistema.codedom elemento en cualquiera de los archivos de configuración. Es necesario?
  • no; todo lo contrario – la web predeterminado.config debe manejar esto, yo era sólo cuestión podría estar allí haciendo uso de C# 2.0
  • Compruebe que la construcción de la/propiedades del Proyecto tengo curiosidad por ver si hay alguna regla o fxcop integración a la fuerza 2.0 especificación?
  • No puedo encontrar nada en absoluto en la construcción o las propiedades de un proyecto que podría estar obligando a 2.0… Comprobado la fuente de la .vsproj archivo, fue en vano.
InformationsquelleAutor Matt | 2011-12-19

6 Comentarios

  1. 26

    La clave de la solución de este problema es la adición de la siguiente etiqueta a tu aplicación.config o web.config

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

    Nota: En algunos casos, la descarga y la recarga del proyecto es necesaria.

    • Para una aplicación de consola, utilizando RazorEngine estas 3 líneas dentro de la aplicación.config fueron suficientes para eliminar el VS de advertencia.
    • Puedo confirmar, el ingrediente clave es targetFramework="4.0" en la aplicación.config. Gracias!
    • Solucionado el problema para mí, pero tuve que reiniciar VS, después de que he cambiado el App.config.
    • Puedo confirmar tenido que reiniciar el VS para que esto surta efecto, pero se hizo el truco.
    • Este trabajó después me descargar y volver a cargar el proyecto. Gracias!
  2. 24

    He intentado todas las soluciones a este error que he podido encontrar por todas partes en la web y no tuvo suerte.

    Por fin tengo este error a desaparecer (y mi IntelliSense para el trabajo) copiando el extra MVC configuración de los bloques de mi web del proyecto.archivo de configuración para mi proyecto de la aplicación.el archivo config.

    Parece Visual Studio no respeto de la web.config (al menos algunas de sus partes) en una llanura de edad C# proyecto de biblioteca.

    Mi proyecto de la aplicación.archivo de configuración se parece a esto:

    Buena suerte.

    • Mismo. Tuve que cerrar y volver a abrir VS después de cambiar de aplicación.config para que las cosas comiencen a trabajar.
  3. 8

    La solución para mí fue cambiar el tipo de proyecto

    1.Descargar el proyecto

    2.Editar el proyecto

    3.Agregue la línea siguiente (en función de su proyecto de MVC versión) justo después de ProjectGuid

    MVC 4

    MVC 3

    @Matt

    Trate de añadir esto a la Web.Config en la Raíz del proyecto (no en la Carpeta Views)

    • Este hecho ayuda… pero todavía no reconocer Linq instrucciones, o el ‘var’ declaración de tipo. Son estas trabajando en tu proyecto?
    • Erm, intenta esto… Ir a las Propiedades del Proyecto > Avanzado de Configuración de generación y establecer el Idioma por defecto, este debe ser C# 4. En teoría esto no debería hacer una diferencia, porque las lambdas se añadió en c# 3 pero esta es la única diferencia que puedo ver desde mi proyecto a la suya.
    • por favor ver mis actualizaciones.
  4. 4

    Después de un par de horas más de retoques, me pareció que tenía algo que ver con el estándar de extensiones de Visual Studio no se carga correctamente.

    Que estaba recibiendo el error:

    ‘VSTS para Profesionales de bases de datos Sql Server Aplicación de capa de Datos de un paquete no se carga correctamente

    He encontrado la respuesta en en Microsoft Connect.

    Cómo arreglar

    1) Ejecutar los siguientes instaladores de Visual Studio medios de comunicación:

    \WCU\DAC\DACFramework_enu.msi

    \WCU\DAC\DACProjectSystemSetup_enu.msi

    \WCU\DAC\TSqlLanguageService_enu.msi

    2) Reiniciar VS

    Espero que esto pueda ayudar a alguien más.

  5. 1

    Teníamos exactamente este problema en nuestro Proyecto de hoy – que podría ser replicado a través de los miembros del equipo por lo que no era un problema de instalación. Intellisense es la compilación de las páginas de la versión 2.0 de código no CS# 3.

    Me relacionarlo con la adición de una Web de Referencia para el Proyecto de la Clase (usando MVCContrib para tenerlo como referencia de la biblioteca como por http://lostechies.com/erichexter/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib/)

    Se llevó a cabo el WebReference y la trasladó a otro proyecto y se ha solucionado el problema, tomó un poco de caza, así que espero que esto ayude a alguien más!

    • Creo que tengo el mismo problema que usted. Estoy usando mvccontrib y no puede obtener linq para trabajar en mis opiniones. Podría usted explicar cómo se soluciona el problema con más detalle?
    • Hola Tyler, yo había añadido un WebReference para la Portátil de Áreas del Proyecto, si no has añadido un WebReference a su proyecto, es poco probable que sea el mismo problema que yo (para solucionarlo, simplemente los he movido el WebReference a un proyecto diferente). Habiendo dicho que ciertamente he tenido un montón de problemas a su alrededor tratando de conseguir que funcione constantemente (y es, literalmente, sólo roto de nuevo). Puede usted describir en detalle un poco más de lo que está sucediendo para usted, ¿ es el trabajo una vez compilado o nunca funciona?
  6. 1

    Agregar un «sistema.codedom» de la sección a su archivo de configuración (app.de configuración en una Aplicación de Consola) por ejemplo:

    • Funciona cuando se vuelve a cargar el proyecto, no antes.

Dejar respuesta

Please enter your comment!
Please enter your name here