2008-10-29 15 views
65

Estoy usando T4 para generar algunas pantallas y código de nivel medio para un proyecto, y me gustaría utilizar Linq para simplificar parte de mi código de plantilla. Sin embargo, cuando intento usar Linq, la plantilla informa un error de sintaxis.¿Cómo puedo usar Linq en una plantilla T4?

Respuesta

95

De forma predeterminada en Visual Studio 2008 (y como se usa en la mayoría de los ejemplos en línea), la plantilla se compila con el Framework 2.0, que no incluye Linq. (Ver MSDN forum thread)

Para resolver el problema, se necesitan tres pasos:

  1. En atributo de idioma de su plantilla, especifique "C# v3.5" o "VBv3.5" - no se requiere este paso para VS2010, donde .Net 4.0 siempre se usa.
  2. Agregar una directiva de montaje para System.Core.dll
  3. importe el espacio System.Linq

La plantilla ahora se verá algo como esto:

<#@ template language="C#v3.5" #> 
<#@ assembly name="System.Core" #> 
<#@ import namespace="System.Linq" #> 

Ahora puede utilizar LINQ y otras nuevas funciones de idioma en su plantilla.

+0

Tuve que usar <# @ assembly name = "System.Core, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089" #> para obtener la versión 3.5 de System.Core.dll. –

+0

Por casualidad, ¿el proyecto "que contiene" era un proyecto 2.0/3.0? Eso puede explicar por qué no sabía cómo encontrar System.Core sin el nombre completo. – GalacticCowboy

+0

Esto funcionó para mí después de que cambié el idioma de 'C#' a 'C# v3.5'. ¡Gracias! ¡Qué extraño cómo el intellisense no mostró esto como una opción! –

Cuestiones relacionadas