国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

T4模板vs2010

2019-11-14 16:50:06
字體:
來源:轉載
供稿:網友

參閱:http://dotnet.VEVb.com/page/78398/

T4模板的定義非常簡單,整個模板的內容包括兩種形式:靜態形式和動態動態。前者就是直接寫在模板中作為原樣輸出的文本,后者是基于某種語言編寫代 碼,T4引擎會動態執行它們。這和我們通過內聯的方式編寫的asp.net頁面很相似:HTML是靜態的,以C#或者VB.NET代碼便寫的動態執行的代 碼通過相應的標簽內嵌其中。

 

現在我們直接通過VS來創建一個T4模板來生成我們期望的C#代碼。右擊項目文件,選擇"Add"|"New Item",在模板列表中選擇"Text Template"。指定文件名后確定,一個后綴名為.tt的文件會被創建,然后在該文件中編寫如下的代碼。

 

1<#@ template debug="false" hostspecific="false" language="C#" #>
2<#@ assembly name="System.Core.dll" #>
3<#@ import namespace="System" #>
4<#@ output extension=".cs" #>
5using System;
6
7namespace Artech.CodeGeneration
8: {
9class PRogram
10: { 
11staticvoid Main(string[] args)
12: { 
13<
14foreach(var person inthis.InitializePersonList()) 
15: {
16: #>Console.WriteLine("Hello, {0}","<#= person#>");
17<# } #>
18: }
19: }
20: }
21
22<#+
23publicstring[] InitializePersonList()
24: {
25returnnewstring[]{"Foo","Bar","Baz"};
26: }

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頁面的指令一樣,它們出現在文件頭,通過<#@&hellip;#>表示。其中<#@ 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  。。或者在vs2010中,插件管理中搜索

 

 

簡單介紹一下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------------------------------------------------------------------


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 什邡市| 页游| 托里县| 义马市| 新田县| 津市市| 福州市| 库车县| 盐山县| 六安市| 小金县| 天峻县| 资溪县| 奉节县| 京山县| 平远县| 宿松县| 舟山市| 新绛县| 沽源县| 乐山市| 林甸县| 泾阳县| 五台县| 赤城县| 海淀区| 平定县| 阿拉善盟| 东乌| 锡林郭勒盟| 襄樊市| 宝山区| 隆回县| 厦门市| 会泽县| 临猗县| 布尔津县| 清流县| 竹溪县| 黔江区| 酉阳|