參閱:http://dotnet.VEVb.com/page/78398/
T4模板的定義非常簡單,整個模板的內容包括兩種形式:靜態形式和動態動態。前者就是直接寫在模板中作為原樣輸出的文本,后者是基于某種語言編寫代 碼,T4引擎會動態執行它們。這和我們通過內聯的方式編寫的asp.net頁面很相似:HTML是靜態的,以C#或者VB.NET代碼便寫的動態執行的代 碼通過相應的標簽內嵌其中。
現在我們直接通過VS來創建一個T4模板來生成我們期望的C#代碼。右擊項目文件,選擇"Add"|"New Item",在模板列表中選擇"Text Template"。指定文件名后確定,一個后綴名為.tt的文件會被創建,然后在該文件中編寫如下的代碼。
27: #>
保存該文件后,一個.cs文件將會作為該TT文件的附屬文件被添加(如右圖所示的HelloWorld.cs)。上述的這個TT文件雖然簡單,卻包含了構成一個T4模板的基本元素。在解讀該T4模板之前,我們有必要先來了解一個完整的T4模板是如何構成的。
T4模板的基本結構:
它們基本上可以分成5類:指令塊(Directive Block)、文本塊(Text Block)、代碼語句塊(Statement Block)、表達式塊(Expression Block)和類特性塊(Class Feature Block)。
1、指令塊(Directive Block)
和ASP.NET頁面的指令一樣,它們出現在文件頭,通過<#@…#>表示。其中<#@ template …#>指令是必須的,用于定義模板的基本屬性,比如編程語言、基于的文化、是否支持調式等等。比較常用的指令還包括用于程序集引用的<#@ assembly…#>,用于導入命名空間的<#@ import…#>等等。
2、文本塊(Text Block)
文本塊就是直接原樣輸出的靜態文本,不需要添加任何的標簽。在上面的模板文件中,處理定義在<#… #>、<#+… #>和<#=… #>中的文本都屬于文本塊。比如在指令塊結束到第一個“<#”標簽之間的內容就是一段靜態的文本塊。
1:using System; 2: 3:namespace Artech.CodeGeneration 4: { 5:class Program 6: { 7:staticvoid Main(string[] args) 8: { 9:3、代碼語句塊(Statement Block)
代碼語句塊通過<#Statement#>的形式表示,中間是一段通過相應編程語言編寫的程序調用,我們可以通過代碼語句快控制文 本轉化的流程。在上面的代碼中,我們通過代碼語句塊實現對一個數組進行遍歷,輸出重復的Console.WriteLine(“Hello, {0}”, “Xxx”)語句。
1: <# 2:foreach(var person inthis.InitializePersonList()) 3: { 4: #> 5: Console.Write("Hello, {0}","<#= person#>"); 6: <# 7: } 8: #>4、表達式塊(Expression Block)
表達式塊以<#=Expression#>的形式表示,通過它之際上動態的解析的字符串表達內嵌到輸出的文本中。比如在上面的foreach循環中,每次迭代輸出的人名就是通過表達式塊的形式定義的(<#= person#>)
5、類特性塊(Class Feature Block)
如果文本轉化需要一些比較復雜的邏輯,我們需要寫在一個單獨的輔助方法中,甚至是定義一些單獨的類,我們就是將它們定義在類特性塊中。類特性塊 的表現形式為<#+ FeatureCode #>,對于Hello World模板,得到人名列表的InitializePersonList方法就定義在類特性塊中。
1: <#+ 2:publicstring[] InitializePersonList() 3: { 4:returnnewstring[]{"Foo","Bar","Baz"}; 5: } 6: #>
整個代碼生成的輸入,即xml文件Messages.xml和模板文件位于相同的目錄下,但是我們需要通過Host屬性的ResolvePath方法去解 析文件的物理路徑。對ResolvePath方法的調用,需要模板<#@ template …#>指令中的hostspecific設置為true。
T4(Text Template Transformation Toolkit)則是微軟官方在VisualStudio 2008中開始使用的代碼生成引擎。
1. T4 獲取智能感知,安裝 http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html 。?;蛘咴趘s2010中,插件管理中搜索
簡單介紹一下T4模板語法
<#@ template language="C#v3.5" hostSpecific="true" debug="true" #>
這里可以指定模板使用的語言,hostSpecific="true"表示是否使用特定的host(Kalman Studio里面使用的是TableHost對象,必須實現接口ITextTemplatingEngineHost)
<#@ output extension=".cs" #> 指定生成文件的擴展名
<#@ assembly name="System.Data" #>
添加程序集引用,如果要使用第三方程序集,那么最好在項目中添加引用,或者加入到GAC
<#@ import namespace="System.Data" #>
導入要使用的命名空間,注意:這里的命名空間必須要在前面指定的程序集里面找得到的,比如我指定命名空間"System.Data","System.Data.Common",這些在程序集System.Data中都有的
<#@ include file="test.tt" #> 導入模板,類似Html的include用法
<# #> 定義代碼塊
<#= #> 定義表達式
<#+ #> 定義變量
-------------------------------------------------此文章原自laoma------------------------------------------------------------------
新聞熱點
疑難解答