好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

T4模板生成代码入门1

T4模板生成代码入门1

一、T4简介

T4(Text Template Transformation Toolkit) 在 Visual Studio 中,“T4 文本模板”是由一些文本块和控制逻辑组成的混合模板,它可以生成文本文件。   在 Visual C# 或 Visual Basic 中,控制逻辑编写为程序代码的片段。生成的文件可以是任何类型的文本,例如网页、资源文件或任何语言的程序源代码。


T4 文本模板有两种类型:

   1、运行时模板   可在应用程序中执行 运行时 T4 文本模板 (“预处理过的”模板)以便生成文本字符串(通常作为其输出的一部分)。

  若要创建运行时模板,请向您的项目中添加 “已预处理的文本模板” 文件。

  另外,您还可以添加纯文本文件并将其 “自定义工具” 属性设置为 “TextTemplatingFilePreprocessor” 。

  2、设计时模板

  在 Visual Studio 中执行 设计时 T4 文本模板 ,以便定义应用程序的部分源代码和其他资源。

  通常,您可以使用读取单个输入文件或数据库中的数据的多个模板,并生成一些  .cs 、 .vb  或其他源文件。

  每个模板都生成一个文件。   在 Visual Studio 或 MSBuild 内执行它们。

  若要创建设计时模板,请向您的项目中添加 “文本模板” 文件。   另外,您还可以添加纯文本文件并将其 “自定义工具” 属性设置为 “TextTemplatingFileGenerator” 。


二、T4例子--HelloWorld

 最简单的HelloWorld,通过此例子,可以看到T4的基本结构

<#@ template debug= "  false  "  hostspecific= "  false  "  language= "  C#  "  #>
<#@ output extension= " .cs " #>
<#@ import namespace = " System " #>
<#@ import namespace = " System.Collections.Generic " #>

using System;

namespace Test
{
public class HelloWorld
{
public static void Main( string [] args)
{
<#
List<Person> people = GetPersonList();
foreach (Person p in people)
{
#>
Console.WriteLine( " Hello {0},Welcome to T4 World! " , " <#= p.Name #> " );
<#}
#>
}
}
}

<#+
// 类
public class Person
{
/// 名称
public string Name{ get ; set ; }

public Person( string name)
{
this .Name = name;
}
}
// 初始化众人
public List<Person> GetPersonList()
{
List<Person> people = new List<Person>();

Person p1 = new Person( " Tom " );
Person p2 = new Person( " Jim " );
Person p3 = new Person( " Lucy " );

people.Add(p1);
people.Add(p2);
people.Add(p3);

return people;
}

#>

复制代码


生成的代码:

 using  System;

namespace Test
{
public class HelloWorld
{
public static void Main( string [] args)
{
Console.WriteLine( " Hello {0},Welcome to T4 World! " , " Tom " );
Console.WriteLine( " Hello {0},Welcome to T4 World! " , " Jim " );
Console.WriteLine( " Hello {0},Welcome to T4 World! " , " Lucy " );
}
}
}

复制代码


三、T4模板的基本结构

代码块的总体分类,就是两种:文本、 程序脚本 。

我感觉这样分类就够了,跟我们用c#写代码生成原理差不多。也是又C#代码和文本组成的。

文本: 就是需要生成的文本

程序脚本: 内部执行,最终生成想要的文本。T4中<# #>中的部分都属于 程序脚本 内容。

 为了细分语法,方便大家更好的理解,用“块”(Block)来表示构成T4模板的基本单元,它们基本上可以分成5类:指令块(Directive Block)、文本块(Text Block)、代码语句块(Statement Block)、表达式块(Expression Block)和类特性块(Class Feature Block)。

1、指令块(Directive Block)

和ASP.NET页面的指令一样,它们出现在文件头,通过<#@…#>表示。其中<#@ template …#>指令是必须的,用于定义模板的基本属性,比如编程语言、基于的文化、是否支持调式等等。比较常用的指令还包括用于程序集引用的<#@ assembly…#>,用于导入命名空间的<#@ import…#>等等。

指令通常是模板文件或包含的文件中的第一个元素。不应将它们放置在代码块 <#...#> 内,也不应放置在类功能块 <#+...#> 之后。

T4 模板指令

<#@ template [language="VB"] [hostspecific="true"] [debug="true"] [inherits="templateBaseClass"] [culture="code"] [compilerOptions="options"] #>

T4 参数指令

<#@ parameter type="Full.TypeName"name="ParameterName"#>

T4 输出指令

<#@ output extension=".fileNameExtension"[encoding="encoding"] #>

T4 程序集指令

<#@ assembly name="[assembly strong name|assembly file name]"#>

T4 导入指令

<#@ import namespace="namespace"#>

T4 包含指令

<#@ include file="filePath"#>

2、文本块(Text Block)

文本块就是直接原样输出的静态文本,不需要添加任何的标签。

3、代码语句块(Statement Block)

代码语句块通过<#Statement#>的形式表示,中间是一段通过相应编程语言编写的程序调用,我们可以通过代码语句快控制文本转化的流程。在上面的代码中,我们通过代码语句块实现对一个数组进行遍历,输出重复的Console.WriteLine(“Hello, {0}”, “Xxx”)语句。 

4、表达式块(Expression Block)

表达式块以<#=Expression#>的形式表示,通过它之际上动态的解析的字符串表达内嵌到输出的文本中。比如在上面的foreach循环中,每次迭代输出的人名就是通过表达式块的形式定义的(<#=  person#>)

5、类特性块(Class Feature Block)

如果文本转化需要一些比较复杂的逻辑,我们需要写在一个单独的辅助方法中,甚至是定义一些单独的类,我们就是将它们定义在类特性块中。类特性块的表现形式为<#+ FeatureCode #>,对于Hello World模板,得到人名列表的InitializePersonList方法就定义在类特性块中。

成长,我们一起见证!

windows应用

T4模板生成代码入门1

摘要:  T4(Text Template Transformation Toolkit)
在 Visual Studio 中,“T4 文本模板”是由一些文本块和控制逻辑组成的混合模板,它可以生成文本文件。 在 Visual C# 或 Visual Basic 中,控制逻辑编写为程序代码的片段。生成的文件可以是任何类型的文本,例如网页、资源文件或任何语言的程序源代码。
本文通过具体实例,来介绍T4的基本结构,对T4有个大概的了解。希望对初识T4的朋友有所帮助。 阅读全文

posted @  2012-02-14 09:48  停留的风 阅读(246) |  评论 (0)   编辑  |

vista破解----最新破解软件

摘要: 教你轻松破解vista,支持各种品牌的笔记本,各种版本的vista系统。最新破解软件如下: 
【1】vista自动激活工具(4.0综合版) 
【2】vistasp1_loader_3.0.0.1 
【3】Windows傻瓜破解注册 阅读全文

posted @  2008-06-02 01:50  停留的风 阅读(524) |  评论 (0)   编辑  |

激活vista遇到的问题

摘要: 激活Vista出现的问题 
Booting 'Windows Vista' 
acpi 
Vista Loader 2.1.2 
ACPI: Reclaim Memory not found! 
进不去系统,进不去安全模式,还不能重装系统 阅读全文

posted @  2008-05-04 10:05  停留的风 阅读(484) |  评论 (2)   编辑  |

自定义域名解析

摘要: Hosts在Windows中应用! 
  1.加快域名解析 
  2.方便局域网用户 
  3.屏蔽网站 
  4.顺利连接系统 阅读全文

posted @  2008-03-06 10:27  停留的风 阅读(383) |  评论 (0)   编辑  |

能登陆QQ,打不开网页

摘要: first:将网络连接自动获得IP,修改为手动,并且填入备用DNS,很可能是域名解析的问题。【经验证】 阅读全文

posted @  2008-01-04 09:34  停留的风 阅读(1746) |  评论 (1)   编辑  |

.net附加工具

摘要: <1>Js压缩工具 
<2>CSS压缩工具 阅读全文

posted @  2007-12-11 14:05  停留的风 阅读(206) |  评论 (0)   编辑  |

Windows技巧荟萃

摘要: 各种Windows技巧 
<1>桌面图标文字背景透明方法 
<2>桌面上得图标都不见啦 
<3>找回“显示桌面”图标 
<4>如何将FAT32分区转换为NTFS分区? 
<5>在Vista中打开命令行 
<6>激活Vista,出现问题 
具体信息:ACPI: Reclaim Memory not found! 
阅读全文

posted @  2007-12-06 11:19  停留的风 阅读(143) |  评论 (0)   编辑  |

绝好的软件集合

摘要: 各种非常实用,功能强大的软件集合,可能好多您都没有用过,如果你真的需要找一个这样得软件,或许这里已经为您准备好啦。
<1>Total commander(全能文件管理工具)
<2>Recover My Files(强大数据恢复工具)
<3>Fantom CD(虚拟光驱)
<4>Symantec Antivirus(诺顿杀毒)10.0.2.2000.Final 简体中文企业版
<5>Virtual CD-ROM Control Panel是一款微软自己推出的虚拟光驱软件
<6>Acronis Disk Director Suite(磁盘管理大师)支持vista,可创建分区、压缩和扩展分区,还能扩大主分区
阅读全文

posted @  2007-12-03 15:06  停留的风 阅读(139) |  评论 (0)   编辑  |

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于T4模板生成代码入门1的详细内容...

  阅读:43次