T4模板之基础篇
一、回顧
上一篇文章 ——T4模板之菜菜鳥篇,我們囫圇吞棗的創建了與“T4模板”有關的文件。在創建各個文件的這一個過程中,我們對于T4模板有了那么丁點的認識。現在就帶著之前的那些問題,正式的邁入對“T4模板”的學習。
二、概念
2.1、類型
T4 文本模板有兩種類型:
- 設計時 T4 文本模板
- 運行時 T4 文本模板
三、簡要教程
我們只講“設計時T4文本模板”,其他的都TMD屬于高級部分了,哥不懂給不給?
打開之前我們創建的“TextTemplate_.tt”文件:
很明顯的有一個特征,那么就是他們都是這種模式:
<#@?指令?屬性=“值”#>
就這樣定了,我們按行來學習
3.1、指令:
3.1.1、模板指令
<#@?template?debug="false"?hostspecific="false"?language="C#"#>?
說的是這個模板,不可以調試,不提供host這個屬性,用的是C#語言。它的完整模式如下,中括號表示可選,沒有寫它將按照默認處理。
<#@ template [language="VB"] [compilerOptions="options"] [culture="code"] [debug="true"] [hostspecific="true"] [inherits="templateBaseClass"] [visibility="internal"] [linePragmas="false"] #>3.1.2、程序集指令
<#@?assembly?name="System.Core"#>?? 它的作用類似于在 Visual Studio 項目中添加程序集引用。
3.1.3、導入指令
<#@?import?namespace="System.Linq"#>?? 它等效于 C# 中的 “using System.Linq;”。
3.1.4、輸出指令
<#@?output extension=".txt"?#>?? 它就是告訴你,T4模板最終將生產.txt對應后綴的文件。
3.2、控制塊
不難發現,如上截圖,我們生成的“TextTemplate_.txt”它里面確實是什么內容都沒有的。因此,更進一步的學習是“控制塊”,對于不同控制塊的組合,便能生成我們所需要的文件。
-
<#?標準控制塊?#>?可以包含語句。
-
<#=?表達式控制塊?#>?可以包含表達式。
-
<#+?類特征控制塊?#>?可以包含方法、字段和屬性,就像一個類的內部
3.3、心動不如行動
唱首歌吧!“我是一只小小小鳥……”:
我是zeje,我們來定義一個變量 string name =“zeje”,再看看效果:
哥已經壓抑了很久了,一起來吶喊吧:
發泄夠了吧?仔細想想,這個類<#+?類特征控制塊?#>?還沒用上。好吧,zeje就在這里自我介紹下吧:
既然都自我介紹過了,是不是可以開溜了呢?還是給大家都個紅包吧!(這里可能需要另外說明,先湊合著看吧!)
生成結果如下:
上面涉及到額外的知識點:使用T4模板輸出多文件,請自行學習。
四、高級篇
其實對于“T4模板”的學習,講得最詳細的還是MSDN,下面給出對應的鏈接,可以點開深入的了解。
- T4 文本模板編寫準則
- 使用 T4 文本模板生成設計時代碼
- 演練:使用文本模板生成代碼
- 生成過程中的代碼生成
- 文本模板的安全性
- 使用 TextTransform 實用工具生成文件
- 使用 T4 文本模板的運行時文本生成
- 編寫 T4 文本模板
- T4 文本模板指令
- T4 模板指令
- T4 參數指令
- T4 輸出指令
- T4 程序集指令
- T4 導入指令
- T4 包含指令
- T4 CleanUpBehavior 指令
- 文本模板控制塊
- 文本模板實用工具方法
- 從文本模板訪問 Visual Studio 或其他主機
- 在文本模板中使用轉義序列
- 如何:使用轉義序列從模板生成模板
- 調試 T4 文本模板
- T4 文本模板編寫準則
- 如何:使用文本模板 ...
- 自定義 T4 文本轉換
- 文本模板轉換過程
- 創建自定義 T4 文本模板指令處理器
- 部署自定義指令處理器
- 演練:創建自定義指令處理器
- 在 VS 擴展中調用文本轉換
- 使用自定義宿主處理文本模板
- 演練:創建自定義文本模板宿主
- T4 文本模板的 API 參考
- 命名空間
- Microsoft.VisualStudio.TextTemplating
- Microsoft.VisualStudio.TextTemplating.Modeling
- Microsoft.VisualStudio.TextTemplating.VSHost
轉載自:https://www.cnblogs.com/zeje/p/5248340.html
總結
- 上一篇: React Native --网络请求(
- 下一篇: 实现Java集合迭代的高性能