我刚开始玩T4,因为我最终想用它来生成映射到LINQ to SQL实体类的POCO,但即使是最简单的例子也让我有些困惑。关于正在发生的事情的一些建议,以及对一些好的阅读的一些建议将不胜感激。
我理解以下模板应该生成一个只包含文本 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
类。在我看来,这是一个中间类,应该用于生成实际的预期模板实现,但是应该发生什么呢?
答案 0 :(得分:3)
答案 1 :(得分:1)
从未见过......你的案例中的输出应该只是:
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 #>
现在,更基本的是