Wie kann ich Linq in einer T4-Vorlage verwenden?


68

Ich verwende T4, um einige Bildschirme und Code der mittleren Ebene für ein Projekt zu generieren, und möchte Linq verwenden, um einen Teil meines Vorlagencodes zu vereinfachen. Wenn ich jedoch versuche, Linq zu verwenden, meldet die Vorlage einen Syntaxfehler.

Antworten:


98

Standardmäßig wird die Vorlage in Visual Studio 2008 (und wie in den meisten Online-Beispielen verwendet) mit dem 2.0 Framework kompiliert, das Linq nicht enthält. (Siehe MSDN-Forenthread )

Um das Problem zu lösen, sind drei Schritte erforderlich:

  1. Geben Sie im Sprachattribut Ihrer Vorlage "C # v3.5" oder "VBv3.5" an. Dieser Schritt ist für VS2010 nicht erforderlich, wobei .Net 4.0 immer verwendet wird.
  2. Fügen Sie eine Assembly-Direktive für System.Core.dll hinzu
  3. Importieren Sie den System.Linq-Namespace

Ihre Vorlage sieht jetzt ungefähr so ​​aus:

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

Sie können jetzt Linq und andere neue Sprachfunktionen in Ihrer Vorlage verwenden.


Ich musste <# @ Assembly Name = "System.Core, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089" #> verwenden, um die 3.5-Version von System.Core.dll zu erhalten.
Lance Fisher

War das "enthaltende" Projekt zufällig ein 2.0 / 3.0-Projekt? Das könnte erklären, warum es nicht wusste, wie man System.Core ohne den vollqualifizierten Namen findet.
GalacticCowboy

Dies funktionierte für mich, nachdem ich die Sprache von C#auf geändert hatte C#v3.5. Vielen Dank! Seltsam, dass der Intellisense dies nicht als Option gezeigt hat!
Dan Atkinson

@ user1007074 Und dein Punkt ist? Diese Frage geht auf die private Beta (oder möglicherweise die erste öffentliche Beta) zurück. Ich bin sicher, wenn Sie genau hinschauen, werden Sie viele "interessante" Dinge finden, die Sie aus dieser Zeit kommentieren können.
GalacticCowboy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.