2008-10-29 8 views
65

Używam T4 do generowania niektórych ekranów i kodu warstwy pośredniej dla projektu, i chciałbym użyć Linq, aby uprościć niektóre z mojego kodu szablonu. Jednak gdy próbuję użyć Linq, szablon zgłasza błąd składni.Jak mogę używać Linq w szablonie T4?

Odpowiedz

95

Domyślnie w Visual Studio 2008 (i jak w większości przykładów online) szablon jest kompilowany za pomocą Framework 2.0, który nie zawiera Linq. (Patrz MSDN forum thread)

Aby rozwiązać ten problem, potrzebne są trzy kroki:

  1. W atrybutu języka szablonie jest określić "C# v3.5" lub "VBv3.5" - ten krok nie jest wymagany dla VS2010, gdzie .Net 4.0 jest zawsze używany.
  2. Dodaj dyrektywę montażową dla System.Core.dll
  3. Importowanie nazw System.Linq

Szablon będzie teraz wyglądać tak:

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

Teraz można używać LINQ oraz inne nowe funkcje językowe w twoim szablonie.

+0

Musiałem użyć <# @ assembly name = "System.Core, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089" #>, aby uzyskać wersję 3.5 pliku System.Core.dll. –

+0

Przez przypadek projekt "zawierający" był projektem 2.0/3.0? To może wyjaśniać, dlaczego nie wiedział, jak znaleźć System.Core bez w pełni kwalifikowanej nazwy. – GalacticCowboy

+0

To działało dla mnie po zmianie języka z 'C#' na 'C# v3.5'. Dzięki! Dziwne, jak intellisense nie pokazało tego jako opcji! –