創建運行時模板
使用 Visual Studio 預處理過的文本模板,可以在運行時在應用程序中生成文本字符串。 執行應用程序的計算機不必具有 Visual Studio。 預處理過的模板有時稱為“運行時文本模板”。每個模板都包含將顯示在生成的字符串中的文本和程序代碼的片段。 程序片段為字符串的可變部分提供值,還控制條件部分和重復部分。
創建運行時文本模板
一、具體步驟:
1、在解決方案資源管理器中,右擊項目,指向“添加”,再單擊“新建項”。
2、在“添加新項”對話框中,選擇“運行時文本模板”。 (在 Visual Basic 中的“常用項\常規”下查看。)
3、鍵入模板文件的名稱,如:MyWebPage
4、單擊“添加”。
將創建一個擴展名為 .tt 的新文件。 該文件的“自定義工具”屬性設置為 TextTemplatingFilePreprocessor。
與之前講到的設計時模板不同。
設計時模板: TextTemplatingFileGenerator
運行時模板:TextTemplatingFilePreprocessor
模板轉換:
當然設計時模板可以轉為運行時模板,只要將該文件的“自定義工具”屬性設置為 TextTemplatingFilePreprocessor即可。
但是運行時模板很多情況下不能轉為設計時模板。
二、實例--顯示課程網頁
新建模板後,自動生成了模板的部分類文件。可以展開 .tt 文件節點,此附屬文件包含一個分部類,該類包含一個名為 TransformText() 的方法。這個方法中的內容會根據模板內容的變化而變化,其實就是模板代碼轉為C#代碼。此方法可以從應用程序中調用。
我們另外新建一個此分部類的文件,以模板名+code結尾:MyWebPageCode.cs,在這裏我們可以聲明模板需要的變量、方法。
這裏我們需要設置課程集合。
using System.Collections.Generic; namespace T4Sample { partial class MyWebPage { private List<string> items; public MyWebPage(List<string> data) { this.items = data; } } }
修改模板:
<#@ template language="C#" #> <html> <body> <h1>計算機課程</h2> <table> <# foreach(string item in Items) { #> <tr><td>Course name : <#= item #> </td></tr> <# } #> </table> </body> </html>
查看附屬文件的部分類,方法:TransformText()
public virtual string TransformText() { this.GenerationEnvironment = null; this.Write("<html>\r\n<body>\r\n<h1>計算機課程</h2>\r\n<table>\r\n "); #line 6 "D:\Code\C#\UFIDA.U8.UAP.EntityGenerator\PreTemplateTest\MyWebPage.tt" foreach(string item in Items) { #line default #line hidden this.Write(" <tr><td>Course name : "); #line 8 "D:\Code\C#\UFIDA.U8.UAP.EntityGenerator\PreTemplateTest\MyWebPage.tt" this.Write(this.ToStringHelper.ToStringWithCulture(item)); #line default #line hidden this.Write(" </td></tr>\r\n "); #line 9 "D:\Code\C#\UFIDA.U8.UAP.EntityGenerator\PreTemplateTest\MyWebPage.tt" } #line default #line hidden this.Write(" </table>\r\n </body>\r\n </html>"); return this.GenerationEnvironment.ToString(); }
程序調用,對模板變量賦值,並調用模板,輸出文件。
static void Main(string[] args) { List<string> items = new List<string>(); items.Add("計算機基礎"); items.Add("數據庫"); items.Add("計算機網絡"); MyWebPage page = new MyWebPage(items); String pageContent = page.TransformText(); //如果有漢字,需要設置編碼格式 System.IO.File.WriteAllText("outputPage.html", pageContent,Encoding.UTF8); }
運行程序,生成模板:
生成的HTML
<html><body> <h1>計算機課程</h2> <table> <tr><td>Course name : 計算機基礎 </td></tr> <tr><td>Course name : 數據庫 </td></tr> <tr><td>Course name : 計算機網絡 </td></tr> </table> </body></html>
瀏覽器打開效果:
在運行時生成文本,若要在特定命名空間中放置已生成的類,請設置文本模板文件的“自定義工具命名空間”屬性。
三、基本原理
由上述實例,我們已經基本了解了運行時模板的基本步驟,現在總結一下運行時模板的基本原理。
我們通常也通過C#輸出文件,可能也要按照一定的格式來生成。其實這裏的運行時模板,就是這樣一個工具,設定好模板後,然後VS自動轉為C#代碼,在部分類中TransformText()方法,我們可以找到蹤跡。
運行時模板,簡單的說就是可視化的C#代碼生成器。
運行時模板,提供了可視化功能,將夾雜在C#代碼中的模板代碼拿出來,讓我們更加直觀的看到模板的真實樣子。方便進行修改和維護。
運行時模板就好比C#代碼,比起設計時模板,方便跟蹤調試。
創建運行時模板