2010-05-09 2 views
6

Я не могу понять этот. Почему T4 не определяет тип IEnumerable? Я использую Visual Studio 2010. И я просто надеюсь, что кто-то знает почему?T4 проблема компиляции трансформации

<#@ 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()) 
       { 
       } 
      } 
     } 
    } 
#> 

Ошибка 2 Компиляция преобразования: Тип или пространство имен имя 'IEnumerable' не может быть найден (вы пропали без вести с помощью директивы или ссылка на сборку?) C: \ Projects \ T4BuildApp \ T4BuildApp \ TextTemplate1.tt 26 9

ответ

3

Возможно, потому что IEnumerable находится в System.Collections.

+1

.... и Джон - ты не импортируя пространство имен 'System.Collections' в ваш шаблон. –

+0

О, как я мог этого не видеть. Благодаря! Я, должно быть, собирался ослепить на час или около того на этом ... –

6

Я также рекомендовал бы Referece #assembly имя = «System.Core» и #import «System.Linq», так что вы получаете больше энергии, когда что-то делать с IEnumerable

+1

Cheers - имел аналогичную проблему, и мне не хватало сборки ref: D –

Смежные вопросы