Проблемы с пониманием Т4 - PullRequest
       1

Проблемы с пониманием Т4

2 голосов
/ 07 августа 2010

Я только начал играть с T4, так как в конечном итоге я хочу использовать его для генерации POCO, которые сопоставляются с классами сущностей LINQ to SQL, но даже самый простой пример меня немного смущает.Несколько советов о том, что происходит, и несколько советов по хорошему чтению будут с благодарностью.

Я понимаю, что следующий шаблон должен создавать файл, содержащий только текст Hello World! , но вместо этого он создает класс, который выводит текст Hello World! Как получить простой и простой Hello World только файл?

Шаблон:

<#@ template language="C#"#>
<#@ output extension=".cs" #>
class HelloWorld
{

}

Вывод:

#line 1 "C:\Development\PocoGenerator\PocoGenerator\HelloWorld.tt"
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "10.0.0.0")]
public partial class HelloWorld : HelloWorldBase
{
    public virtual string TransformText()
    {
        this.GenerationEnvironment = null;
        this.Write("class HelloWorld\r\n{\r\n\r\n}\r\n\r\n");
        return this.GenerationEnvironment.ToString();
    }
}

#line default
#line hidden

За ним следует относительно сложный класс HelloWorldBase в том же выходном файле.Мне кажется, что это промежуточный класс, который должен использоваться для создания фактической предполагаемой реализации шаблона, но что должно произойти, чтобы это произошло?

Ответы [ 2 ]

3 голосов
/ 08 августа 2010

ProfK,

Вы смотрите на результаты, полученные с помощью предварительно обработанного шаблона .Если вы выберете обычный «Текстовый шаблон» в диалоге нового элемента проекта Visual Studio, вы увидите полные результаты преобразования.

Олег

1 голос
/ 07 августа 2010

Никогда не видел этого ... Выход в вашем случае должен просто быть:

class HelloWorld
{
}

Только что проверил это, и вот что он производит здесь ...

Что такое пользовательский инструмент для вашего файла .tt? Вы можете проверить это, щелкнув правой кнопкой мыши файл в обозревателе решений и выбрав «Свойства». Это должен быть TextTemplatingFileGenerator.

В T4 все, что находится между <# и #>, интерпретируется как код (в данном случае C #). Подобно <%= или <%: в ASP.Net, вы также можете использовать '<#=' для автоматического преобразования оператора в строку. Итак, чтобы просто вывести «Hello World», вы можете использовать любой текст:

<#@ template language="C#"#>
<#@ output extension=".cs" #>
Hello World

или используйте это:

<#@ template language="C#"#>
<#@ output extension=".cs" #>
<#= "Hello World" #>

или даже другим способом:

<#@ template language="C#"#>
<#@ output extension=".cs" #>
<# var text = "Hello World"; #>
<#= text #>

Теперь более фундаментально

  • уже есть несколько реализаций T4 для L2S, возможно, вам стоит взглянуть на них (поиск Google по 'linq to sql poco T4' уже показывает несколько ссылок) Например. http://blog.tonysneed.com/2009/01/16/t4-poco-templates-for-l2s-and-ef/
  • Вы также можете рассмотреть возможность использования Entity Framework вместо L2S. Из коробки есть готовый шаблон POCO.
...