=============C#.Net 篇目录==============
(一)什么是T4模板?
T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit。
T4文本模板,即一种自定义规则的代码生成器。根据业务模型可生成任何形式的文本文件或供程序调用的字符串。(模型以适合于应用程序域的形式包含信息,并且可以在应用程序的生存期更改)
VS本身只提供一套基于T4引擎的代码生成的执行环境,由下面程序集构成:
Microsoft.VisualStudio.TextTemplating.10.0.dll
Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll
Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll
Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll
便利工具:
1、 T4Toolbox.msi(CodePlex上开源的工具)
a) 提供一些可以直接使用的代码生成器,比如Enum SQL View、AzMan wrapper、LINQ to SQL classes、LINQ to SQL schema和Entity Framework DAL等。
b) 提供一些基于T4方面的VS的扩展:当你安装之后,在“Add New Item”对话框中就会多出一个命名为“Code Generation”的类别,其中包括若干文件模板。
2、 T4 模板编辑器(eg:支持代码着色、智能提示)
当然我们也可以通过VS2010中新增的扩展管理器(Extension Manager)来添加Vs扩展插件。扩展管理器(Extension Manager),这和Eclipse/Netbeans有些相似,用户可以直接在IDE中从Visual Studio 库(Visual Studio Gallery)找到并下载扩展。通过VS的菜单Tools->Extension Manager,这里你可以添加,删除已经安装的VS的扩展插件。打开界面如下:
笔者在学习 T4 的时候使用过上面两个 T4 模板编辑器。稍作几点对比:
a) tangible T4 Editor可选择安装内嵌的 UML 模板模型
b) 对于不是常用的dll( eg:EnvDTE.dll ),tangible T4 Editor免费版和 Visual T4 都不支持导航,并且所报的提示页不一样
tangible T4 Editor免费版中提示如下:
Visual T4中则直接提示:
但是在 Visual T4 中,我们可以通过在程序集中引入 EnvDTE.dll 解决此错误的提示(完成开发后可移除程序集引用),并且还能完美的获得该程序集的智能提示功能,如下图所示:
同时我们也可以看到 Visual T4 中代码着色也更加贴近 VS (蓝色字体标注对象)。
小结:
1. 就“代码着色”和“智能提示”方面Visual T4 工具表现更完美(前提是必须主动在项目中引入对应程序集),但目前最新版本存在缩进问题实在可惜,悲愤中等更新。.
2. 可能你还想要tangible T4 Editor提供的 UML 模板模型,呵呵……现在我本机同时装了这两款 T4编辑器,暂时还没发现冲突。
(二)T4基本结构
T4模板可以分为:指令块、文本块、控制块。
1. 指令块 - 向文本模板化引擎提供关于如何生成转换代码和输出文件的一般指令。
2. 文本块 - 直接复制到输出的内容。
3. 控制块 - 向文本插入可变值并控制文本的条件或重复部件的程序代码,不能在控制块中嵌套控制块。
n 指令块
6个指令<#@ template #>、<#@ parameter#>、<#@ assembly #>、<#@ import #>、<#@ include #>、<#@ output #>、
其中, output 和 assembly 只能用在设计时模板。
1) T4 模板指令
<#@ template [language="C#"] [hostspecific="true"] [debug="true"] [culture="code"] [inherits="templateBaseClass"] [compilerOptions="options"] #>
这里只说明下 inherits 属性,其余属性在本文更合适的地方有进行说明。
inherits
指定模板的程序代码继承自另一个类,该基类可以是由其他模板生成。
1) 运行时(预处理过的)文本模板中的继承
如果不指定 inherits 特性,则会从您的文本模板生成基类和派生类。指定 inherits 特性时,仅生成派生类。
2) 设计时文本模板中的继承
设计时模板会生成任何类型的“文本文件”,此文件将组成 Visual Studio 项目的一部分。T4 模板引擎首先要将模板转换为中间程序代码文件,中间代码文件将写入您的 %TEMP% (环境变量) 目录。默认该生成的中间代码继承自 Microsoft.VisualStudio.TextTemplating.TextTransformation 类,但你也可根据需求使用 inherits 特性指定派生于 TextTransformation 类的任何基类。
模板引擎生成转换类更详细的请参考本文后面的 何时编译,编译过程 节。
2) T4 参数指令
<#@ parameter type="Full.TypeName" name="ParameterName" #>
在 Visual Studio 文本模板中,parameter