2010-05-09 13 views
6

Ich kann das nicht herausfinden. Warum findet T4 nicht den Typ IEnumerable? Ich benutze Visual Studio 2010. Und ich hoffe nur, jemand weiß warum? T4 Fehler Compiling Transformation

<#@ template debug="true" hostspecific="false" language="C#" #> 
<#@ assembly name="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" #> 
<#@ import namespace="System" #> 
<#@ import namespace="System.Data" #> 
<#@ import namespace="System.Data.SqlClient" #> 
<#@ output extension=".cs" #> 
public static class Tables 
{ 
    <# 

    var q = @" 
     SELECT 
      tbl.name 'table', 
      col.name 'column' 
     FROM 
      sys.tables tbl 
     INNER JOIN 
      sys.columns col ON col.object_id = tbl.object_id 
    "; 

    // var source = Execute(q); 

    #> 
} 
<#+ 
    static IEnumerable Execute(string cmdText) 
    { 
     using (var conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=t4build;Integrated Security=True;")) 
     { 
      conn.Open(); 

      var cmd = new SqlCommand(cmdText, conn); 

      using (var reader = cmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
       } 
      } 
     } 
    } 
#> 

Fehler 2 Kompilieren Transformation: Der Typ oder Namespace-Name 'IEnumerable' konnte nicht gefunden werden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?) C: \ Projects \ T4BuildApp \ T4BuildApp \ TextTemplate1.tt 26 9

Antwort

3

Wahrscheinlich, weil IEnumerable in System.Collections ist. Sie sind -

+1

.... und John Referece empfehlen den 'System.Collections'-Namespace nicht in Ihre Vorlage importieren –

+0

Oh, wie hätte ich das nicht sehen können? Vielen Dank! Ich muss seit ungefähr einer Stunde blind sein ... –

6

Ich würde auch #assembly name = "System.Core" und #import "System.Linq", so dass Sie mehr Macht bekommen, wenn etwas zu tun mit IEnumerable

+1

Prost - hatte ein ähnliches Problem und mir fehlte eine Versammlung ref: D –

Verwandte Themen