T4模板作為VS自帶的一套代碼生成器,功能有多強大我也不知道,最近查找了一些資料學習一下,做個筆記
更詳細的資料參見:
MSDN: http://msdn.microsoft.com/zh-cn/library/bb126445.aspx
你必須懂的T4模板:深入淺出:http://www.cnblogs.com/heyuquan/archive/2012/07/26/2610959.html
准本工作:
T4模板是沒有顏色高亮提示的,我們可以安裝vs支持的插件,我安裝的是 T4 Editor,當然還有其他比如 Visual T4等,
T4 Editor下載地址:http://t4-editor.tangible-engineering.com/Download_T4Editor_Plus_ModelingTools.html
一 .T4模板分類
T4模板分為 文本模板 和 運行時文本模板,其中文本模板 程序的源代碼在程序編譯前就被使用(寫代碼時開始編譯),可以直接轉換成項目的程序源碼,運行時文本模板,即運行時開始編譯,生成各式文檔。
下面以 運行時文本模板 為例創建一個簡單的實例:
其中RuntimeTextTemplate1.tt為創建的運行時文本模板,在“添加-新建項”中可以找到“運行時文本模板”
創建好的空的RuntimeTextTemplate1.tt有一些初始代碼
<#@ template language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".html"#>
<#@ template language="C#" #> 指定使用的編程語言是C#,<#@ output extension=".html"#>指定輸出的是html文件,其他的暫時不管,語法暫時不考慮,接着后面添加簡單的測試代碼:
<h3>運行時文本模板</h3>
<div>
hello World
</div>
下面我們查看這個模板,創建一個web窗體應用程序,WebPrintTest.T4,在index的Page_Load()中加入一下代碼
RuntimeTextTemplate1 T4= new RuntimeTextTemplate1();
string str = T4.TransformText();
print.InnerHtml = str;
就可以在index.aspx中顯示生成的模板,
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebPrintTest.T4.Index" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div id="print" runat="server"> </div> </form> </body> </html>
查看一下:
運行時文檔模板會產生一個類(以模板名稱命名),查看一下部分代碼:
二 .調試
如果要調試T4文本模板文件,首先將模板指令<#@ template #> 的debug特性值設置為true,然后倒入命名空間
<#@ import namespace="System.Diagnostics" #>
若要在模板執行的特定點啟動調試器,請插入對 Debugger.Launch() 的調用。 若要在后續的點處中斷執行,請插入對 Debugger.Break() 的調用,【F10】單步調試
調試過程: