亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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  。?;蛘咴趘s2010中,插件管理中搜索

 

 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美多人乱p欧美4p久久| 国产精品久久久久久av下载红粉| 午夜精品久久久久久久99黑人| 高清亚洲成在人网站天堂| 亚洲精品在线观看www| 午夜精品久久久久久99热| 欧美日韩在线视频首页| 亚洲综合中文字幕在线观看| 国产欧美日韩丝袜精品一区| 亚洲999一在线观看www| 日韩精品免费观看| 国产在线观看精品| 欧美综合一区第一页| 91丨九色丨国产在线| 欧美极品少妇xxxxⅹ免费视频| 日韩中文字幕网| 136fldh精品导航福利| 亚洲午夜av久久乱码| 日韩欧美在线网址| 亚洲国产91色在线| 久久91亚洲精品中文字幕| 1769国内精品视频在线播放| 日韩成人av在线| 欧美在线视频导航| 亚洲成年人在线播放| 欧美一级大片在线免费观看| 午夜精品久久久久久99热软件| 国产精品成人播放| 精品福利视频导航| 成人免费视频xnxx.com| 久久久久久网站| 国产偷亚洲偷欧美偷精品| 97国产真实伦对白精彩视频8| 欧美性猛交xxxx乱大交极品| 久久久精品在线| 国产精品揄拍一区二区| 亚洲视频欧美视频| 色无极影院亚洲| 97热在线精品视频在线观看| 国产在线播放不卡| 久99久在线视频| 欧美亚洲国产成人精品| 亚洲国产精品久久精品怡红院| 91中文字幕一区| 国产一区在线播放| 亚洲精品国产综合区久久久久久久| 在线看欧美日韩| 亚洲欧洲av一区二区| 欧美大奶子在线| 亚洲午夜精品久久久久久性色| 中文字幕欧美日韩va免费视频| 国产在线拍揄自揄视频不卡99| 欧美午夜久久久| 亚洲视屏在线播放| 日韩高清电影免费观看完整| 亚洲国产精品成人av| 国产精品18久久久久久首页狼| 亚洲色无码播放| 日韩一区二区精品视频| 国产精品嫩草影院一区二区| 九九热最新视频//这里只有精品| 久久国内精品一国内精品| 揄拍成人国产精品视频| 亚洲缚视频在线观看| 狠狠操狠狠色综合网| yellow中文字幕久久| 日韩免费黄色av| 久久久久久国产三级电影| 91在线免费看网站| 欧美国产亚洲精品久久久8v| 色偷偷偷亚洲综合网另类| 一本一本久久a久久精品牛牛影视| 九九综合九九综合| 日韩av在线免费看| 亚洲欧美日韩久久久久久| 欧美—级a级欧美特级ar全黄| 色琪琪综合男人的天堂aⅴ视频| 久久久久99精品久久久久| 一区二区三区回区在观看免费视频| 欧美日韩亚洲精品一区二区三区| 777午夜精品福利在线观看| 97在线视频免费| 欧美性猛交丰臀xxxxx网站| 亚洲成人网在线观看| 久久久久国产精品www| 欧美极度另类性三渗透| 亚洲视频欧美视频| 日韩在线播放av| 57pao成人永久免费视频| 欧美成人在线免费视频| 国产亚洲精品一区二区| 国产精品h在线观看| 色妞色视频一区二区三区四区| 欧美午夜激情在线| 97香蕉久久夜色精品国产| 国产精品视频xxxx| 97视频在线观看成人| 日韩视频在线免费观看| 激情成人在线视频| 成人网在线免费看| 91精品国产高清自在线看超| 91国内揄拍国内精品对白| 国产一区二区三区视频| 国产一区二区三区在线观看网站| 国产精品久久一区主播| 日韩电影中文字幕在线观看| 亚洲国产天堂网精品网站| 欧美成人免费va影院高清| 欧美激情视频在线观看| 精品偷拍一区二区三区在线看| xx视频.9999.com| 欧美国产日韩在线| 国产精品都在这里| 国产欧美日韩亚洲精品| 欧美午夜宅男影院在线观看| 91色视频在线导航| 亚洲精品国产精品国产自| 国产精品久久999| 国产69精品99久久久久久宅男| 亚洲精品中文字幕女同| 色综合伊人色综合网站| 亚洲色图13p| 日韩精品亚洲元码| xx视频.9999.com| 国产精品手机播放| 国产精品免费一区| 日韩69视频在线观看| 亚洲国产精品免费| 亚洲一级黄色片| 福利视频一区二区| 日韩一区二区在线视频| 最近2019中文字幕mv免费看| 欧美视频免费在线观看| 亚洲成人激情视频| 国产女精品视频网站免费| 亚洲色图激情小说| 久久精品视频在线观看| 欧美极品欧美精品欧美视频| 精品中文视频在线| 欧美性感美女h网站在线观看免费| 国产精品网红福利| 精品久久久久久中文字幕一区奶水| 国产在线观看一区二区三区| 国产美女直播视频一区| 午夜精品福利在线观看| 国产成人在线播放| 国产综合香蕉五月婷在线| 性欧美激情精品| 国产精品第一页在线| 日韩欧美在线视频日韩欧美在线视频| 欧美黄色成人网| 国产成人精品在线| 国产97人人超碰caoprom| 青草热久免费精品视频| 亚洲国产古装精品网站| 国产丝袜精品第一页| 国产一区二区三区丝袜| 成人免费激情视频| 亚洲最大福利网站| 亚洲男人天堂2019| 国产精品国产福利国产秒拍| 亚洲精美色品网站| 九九热这里只有在线精品视| 久久视频免费观看|