T4 模板

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

One .預處理的文本模板

先說說這個,這個是設計時的模板。能夠在運行時在應用程序中生成文本字符串。 預處理過的模板有時稱爲「運行時文本模板」。什麼是運行時模板呢?其實,也很好理解,好比咱們在寫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是爲了在後臺能調用,固然你也能夠用其餘空間進行渲染。

你還能夠在控制檯進行顯示,調用方法也和上面同樣。好比在控制檯輸出的內容爲:

很酷吧。暫時先體驗一下吧。

好了,接下來咱們來講說文本模板。

Two.文本模板

如上圖所示,文本模板裏的自定義工具是: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

相關文章
相關標籤/搜索