成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),禹王臺企業(yè)網(wǎng)站建設(shè),禹王臺品牌網(wǎng)站建設(shè),網(wǎng)站定制,禹王臺網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,禹王臺網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
? template:模板相關(guān)的屬性,debug是否可以調(diào)試;hostspecific設(shè)置為true時,為生成的模板類中添加Host屬性
? output:生成輸出文件類型
? assembly:模板引擎中引用的程序集
? import:模板引擎中導(dǎo)入的命名空間
? include:包含其他文件,在最終轉(zhuǎn)換時,將這些引用的文件和當(dāng)前文件進行合并
? 標(biāo)準(zhǔn)代碼控制區(qū),<#...#>包圍的區(qū)域,包含標(biāo)準(zhǔn)的代碼
? 表達式控制區(qū),<#=...#>包圍的區(qū)域,計算表達式的值,插入到最終輸出文件中
? 類特性控制區(qū),<#+...#>包圍的區(qū)域,定義類、屬性、方法等,主要用于幫助類或者幫助方法,可以其他代碼區(qū)域引用這里定義的類和方法,該區(qū)域中包含的代碼可以放在單獨文件中,然后include到當(dāng)前文件中
? Write,WriteLine:向模板中寫入數(shù)據(jù)文本
? Error,在VS的Error Window面板顯示錯誤
? Warning,在VS的Error Window面板顯示警告
更多方法,請參考:http://msdn.microsoft.com/en-us/library/bb126474.aspx
? Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost類型
? 使用Host.ResolvePath()引用相對于模板的路徑
? 使用Host.LogErrors打印錯誤信息,如果宿主是VS的話,就是向Error Window打印錯誤警告信息
? 如果是在VS中使用,可以訪問VS的API
? T4模板不是編寫代碼的理想環(huán)境(沒有智能提示等)
? 首先在其他工程中實現(xiàn)模板需要的功能
? 將工程的代碼遷移到T4模板中
? 首先建議采用上面說的開發(fā)流程,T4模板的Debug是用來解決遷移過程中出現(xiàn)的問題
? template指令設(shè)置debug="true“
? 添加斷點
? 在模板文件中右鍵Debug T4 Template
GeneratedTextTransformation繼承自TextTransformation,如果要使用另外一套方法集,可以定義繼承自TextTransformation的類,然后在template指令的inherits屬性指定為該類
? 加載引擎或者指令處理器需要的文本文件或者二進制文件,比如加載程序集、指令處理器代碼文件,也可以讀取文本文件,將它們的內(nèi)容作為字符串返回
? 為引擎創(chuàng)建GeneratedTextTransformation類提供一組標(biāo)準(zhǔn)的程序集和命名空間
? 為引擎編譯和執(zhí)行GeneratedTextTransformation類提供AppDomain,使用獨立的AppDomain是為保護宿主應(yīng)用程序(VS)不受模板文件中錯誤的影響
? 將生成的結(jié)果寫入輸出文件
? 為生成的輸出文件設(shè)置默認擴展名
? 處理文件轉(zhuǎn)換過程中出現(xiàn)的錯誤,比如寫入文件中,又比如VS將錯誤顯示到Error Window中
? 為指令提供默認值,比如language默認值C#
創(chuàng)建并運行自己的工程,引用Microsoft.VisualStudio.TextTemplating.11.0.dll和Microsoft.VisualStudio.TextTemplating.Interfaces.11.0.dll,主要是使用Engine的ProcessTemplate
更詳細流程請參考官方文檔:http://msdn.microsoft.com/en-us/library/bb126579.aspx
? 提供公共功能,訪問外部資源或數(shù)據(jù)
? 引擎將指令轉(zhuǎn)換為代碼,添加到GeneratedTextTransformation中,比如Import指令最終添加為using代碼語句
需要創(chuàng)建繼承自DirectiveProcessor或者RequiresProvidesDirectiveProcessor的類,該類的重要接口如下
? bool IsDirectiveSupported(string directiveName)支持哪些指令,只有返回true的指令名稱,才會進行下一步的處理
? void ProcessDirective (string directiveName, IDictionary<string, string> arguments)處理指令時,引擎調(diào)用這個方法,一般是將指令名稱和參數(shù)保存下來為后面的操作做準(zhǔn)備
? string[] GetReferencesForProcessingRun()返回模板需要的程序集名稱
? string[] GetImportsForProcessingRun()返回模板需要的命名空間
? string GetClassCodeForProcessingRun()向GeneratedTextTransformation類中插入的實際代碼,定義了公共功能如屬性、方法等的代碼
? Visual Studio Extension (VSIX)
? VSPackage
? 注冊表
詳細部署流程,請參考官方文檔:http://msdn.microsoft.com/en-us/library/cc138364.aspx
參考文檔和資料
http://msdn.microsoft.com/en-us/library/bb126445.aspx
http://www.cnblogs.com/artech/archive/2010/11/16/T4_Assembly_Locking_Debug.html
http://www.cnblogs.com/artech/archive/2010/10/23/1859529.html
http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx
本文題目:T4TemplateOverview
文章出自:http://chinadenli.net/article36/ppccpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、品牌網(wǎng)站設(shè)計、自適應(yīng)網(wǎng)站、網(wǎng)站策劃、靜態(tài)網(wǎng)站、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)