T4 模板語言是一個模板代碼生成語言,什麼意思呢?就是經過模板,生成咱們相應的所須要的文件。很好理解,好比咱們在寫類的時候,咱們一般是新建一個類文件,這個時候它出來的頁面並不是空白,而是有一些基本的內容,好比我新建一個 MyTest的類文件:html
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
namespace
BLL
{
class
MyTest
{
}
}
|
因此,上面的這些經常使用的信息就是用模板語言來進行新建的。ide
T4 模板語言的後綴以.tt結尾的,咱們能夠在 VS 2008 或 VS 2010裏面進行使用。以下圖:工具
看到了木有,第一個「預處理的文本模板」和第二個是文本模板。spa
介紹2中模板的用途:debug
先說說這個,這個是設計時的模板。能夠在運行時在應用程序中生成文本字符串。 預處理過的模板有時稱爲「運行時文本模板」。什麼是運行時模板呢?其實,也很好理解,好比咱們在寫C#代碼的時候,咱們也分爲運行時的編譯仍是設計時,運行時就是在程序開始執行的時候纔開始,而設計時是說你在寫代碼那一刻就開始編譯。更具體的例子說,假如咱們有一個錯誤,若是編譯時錯誤,那麼咱們寫完離開就會顯示出來,但是有些錯誤在編譯的時候,是沒法知道的,好比說內存泄露等等,這個必需要等程序運行的時候才能知道。設計
通常來講,預處理模板在項目中的使用比較大,由於它有一個partial的分部類,咱們都知道,在VS裏面爲了便於對某些元素進行擴展,不少時候都使用的分部類。這裏也不例外。並且我目前作的經過UML 類圖生成代碼 都是經過partial來進行擴展的。調試
咱們能夠看到,它和文本模板(第二點會介紹)屬性的惟一不一樣即是:自定義工具的值不一樣。預處理的是:TextTemplatingFilePreprocessorcode
文本的是:TextTemplatingFileGeneratororm
如今先創建預處理的文件,對於它的一些語法,咱們暫時先不考慮,語法咱們會在下一節進行說明。server
將建立一個擴展名爲 .tt 的新文件。該文件的「自定義工具」屬性設置爲 TextTemplatingFilePreprocessor。以下圖:
具體操做過程以下:
1.在解決方案資源管理器中,右擊項目,指向「添加」,再單擊「新建項」。
2.在「添加新項」對話框中,選擇「預處理文本模板」。(在 Visual Basic 中的「經常使用項\常規」下查看。)
3.鍵入模板文件的名稱。
這裏須要注意的一點是,模板文件名將在生成的代碼中用做類名。所以,該名稱不該包含空格或標點。
4.單擊「添加」。能夠了,到這一步就OK了。
而後會看到只有一行代碼:<#@ template language="C#" #>
如今咱們,在這行代碼的下面放入如下代碼:
<#@ output extension=".html" #>
<
h1
>列出全部數字:</
h2
>
<
table
>
<# for (int i = 1; i <= 10; i++)
{
#>
<
tr
><
td
>數字: <#= i #> </
td
>
<
td
>倍數: <#= i * i #> </
td
> </
tr
>
<# } #>
</
table
>
|
咱們如今只須要知道的是,它輸出的類型是.html,extension=".html",即代表它輸出的是網頁文件。
那咱們怎麼看它呢?
好比咱們須要在aspx裏調用這個模板文件,那麼我只須要在須要觸發事件的方法下面調用這個就OK,好比我這裏是在page_load的時候,把模板裏的內容顯示到頁面上。
protected
void
Page_Load(
object
sender, EventArgs e)
{
PreTextTemplate1 t4 =
new
PreTextTemplate1();
string
str = t4.TransformText();
t4Div.InnerHtml = str;
}
|
頁面,我放了一個div,如<div id="t4Div" runat="server"></div>,把runat設爲server是爲了在後臺能調用,固然你也能夠用其餘空間進行渲染。
你還能夠在控制檯進行顯示,調用方法也和上面同樣。好比在控制檯輸出的內容爲:
很酷吧。暫時先體驗一下吧。
好了,接下來咱們來講說文本模板。
如上圖所示,文本模板裏的自定義工具是:TextTemplatingFileGenerator
文本模板是一種在設計時顯示的結果的一種模式.也就是所見所得的一種模式吧。
1.生成html文件
好比我如今仍是上面的代碼,新建一個文本模板,而後再下面寫入一下代碼:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".html" #>
<html><body>
<h1>Sales for Previous Month</h2>
<table>
<# for (int i = 1; i <= 10; i++)
{ #>
<tr><td>Test name <#= i #> </td>
<td>Test value <#= i * i #> </td> </tr>
<# } #>
</table>
This report is Company Confidential.
</body></html>
這個 結果怎麼看呢?很簡單,你只須要展開TextTemplate1.tt,你會看到一個TextTemplate1.html(由於你上面的output設置了.html)文件。
2.生成文本文件
<#@ output extension=".txt" #>
列出數字從1 到 10:
<#
int list=10;
for(int i=0;i<10;i++){
#><#= i #><#= } #>
它和上面的惟一的區別就是output的不同。查看方式也很easy哦。
3. 生成類文件
你還能夠生成類文件,它主要的都合上面的同樣,惟一的區別就是output的輸出類型是.cs文件。
<#@ output extension=".cs" #>
<# var properties = new string [] {"P1", "P2", "P3"}; #>
class MyGeneratedClass {
<#
foreach (string propertyName in properties)
{ #>
private int <#= propertyName #> = 0;
<# } #>
}
生成
class MyGeneratedClass {
private int P1 = 0;
private int P2 = 0;
private int P3 = 0;
}
在T4裏是沒有像VS的C#調試那麼簡單,在左邊設置一個調試點,而後點擊運行就OK了。
不過,也差很少吧!值須要的只是:<# Debugger.Break(); #> 把這個放到你須要調試的地方,等你運行的時候,就會自動的跳到這裏啦。而後,你就能夠看到你的內容,好比我在個人項目中調試中的結果:
,而後 安F10 行執行,F11是但不執行,都是同樣的啦。
轉載:https://www.cnblogs.com/damonlan/archive/2012/01/12/2320429.html