C#T4模板
T4(Text Template Transformation Toolkit)是微軟官方在VisualStudio 2008中開始使用的代碼生成引擎。在 Visual Studio 中,“T4 文本模板”是由一些文本塊和控制邏輯組成的混合模板,它可以生成文本文件。 在 Visual C# 或 Visual Basic 中,控制邏輯編寫為程序代碼的片段。生成的文件可以是任何類型的文本,例如網頁、資源文件或任何語言的程序源代碼。現在的VS中只要與代碼生成相關的場景基本上都能找T4的身影,比如MVC的視圖模板,Entity Framwork的DataContext模板等等。
?我們先來創建一個試試
?
T4 文本模板有兩種類型
- 設計時模版
可在應用程序中執行運行時 T4 文本模板(“預處理過的”模板)以便生成文本字符串(通常作為其輸出的一部分)。
若要創建運行時模板,請向您的項目中添加“已預處理的文本模板”文件。?另外,您還可以添加純文本文件并將其“自定義工具”屬性設置為“TextTemplatingFilePreprocessor”。
有關更多信息,請參見使用預處理 T4 文本模板生成運行時文本。?有關模板語法的更多信息,請參見編寫 T4 文本模板。
- 運行時模版
在 Visual Studio 中執行設計時 T4 文本模板,以便定義應用程序的部分源代碼和其他資源。
通常,您可以使用讀取單個輸入文件或數據庫中的數據的多個模板,并生成一些?.cs、.vb?或其他源文件。?每個模板都生成一個文件。?在 Visual Studio 或 MSBuild 內執行它們。
若要創建設計時模板,請向您的項目中添加“文本模板”文件。?另外,您還可以添加純文本文件并將其“自定義工具”屬性設置為“TextTemplatingFileGenerator”。
有關更多信息,請參見使用 T4 文本模板生成設計時代碼。?有關模板語法的更多信息,請參見編寫 T4 文本模板。
文本模板由以下部件組成:
指令?- 控制模板處理方式的元素。
文本塊?- 直接復制到輸出的內容。
控制塊?- 向文本插入可變值并控制文本的條件或重復部件的程序代碼。
?
T4 文本模板指令
?
?
- T4模版指令? <#@ template [language="C#"] [compilerOptions="options"] [culture="code"] [debug="true"] [hostspecific="true"] [inherits="templateBaseClass"] #>
?
- T4 參數指令 <#@ parameter type="Full.TypeName" name="ParameterName" #>
顧名思義,就是用來傳參的,應該是用在運行時模版的(預處理模版)
- T4 輸出指令 <#@ output extension=".fileNameExtension" [encoding="encoding"] #>
比較重要的指令,用于設置輸出文件的后綴名和文件編碼
extension:輸出文件擴展名,默認為".cs"
encoding:文件編碼,默值為utf-8(這里不能確定,我測試是utf-8)
- T4 程序集指令 <#@ assembly name="[assembly strong name|assembly file name]" #>
?
$(SolutionDir):當前項目所在解決方案目錄
$(ProjectDir):當前項目所在目錄
$(TargetPath):當前項目編譯輸出文件絕對路徑
$(TargetDir):當前項目編譯輸出目錄,即web項目的Bin目錄,控制臺、類庫項目bin目錄下的debug或release目錄(取決于當前的編譯模式)
舉個例子:比如我們在D盤根目錄建立了一個控制臺項目TestConsole,解決方案目錄為D:\LzrabbitRabbit,項目目錄為
D:\LzrabbitRabbit\TestConsole,那么此時在Debug編譯模式下
$(SolutionDir)的值為D:\LzrabbitRabbit
$(ProjectDir)的值為D:\LzrabbitRabbit\TestConsole
$(TargetPath)值為D:\LzrabbitRabbit\TestConsole\bin\Debug\TestConsole.exe
$(TargetDir)值為D:\LzrabbitRabbit\TestConsole\bin\Debug\
- T4 導入指令 <#@ import namespace="namespace" #>
在 Visual Studio T4 文本模板的代碼塊中,import 指令允許您在不提供完全限定名稱的情況下引用另一個命名空間中的元素。 它等效于 C# 中的 using 或 Visual Basic 中的 imports。默認已經導入了System命名空間的引用。
- T4 包含指令 <#@ include file="filePath" #>
?
?
?文本塊
?文本塊直接向輸出文件插入文本。?文本塊沒有特殊格式。
<#@ output extension=".txt" #> Hello World!控制塊
控制塊是用于轉換模板的程序代碼節,默認語言是 C#,但若要使用 Visual Basic,可以在文件開頭編寫以下指令:
?
<#@ template language="VB" #>用于編寫控制塊代碼的語言與生成的文本的語言無關。
標準控制塊
標準控制塊是生成輸出文件部件的程序代碼節。
在模板文件中,可以混合使用任意數量的文本塊和標準控制塊。 但是,不能在控制塊中嵌套控制塊。 每個標準控制塊都以 <# ... #> 符號分隔。
例如,如果使用下面的控制塊和文本塊,則輸出文件包含行“0, 1, 2, 3, 4 Hello!”:
在代碼中,可以使用 Write(); 語句的位置都可以插入文本塊。?
表達式控制塊
表達式控制塊計算表達式并將其轉換為字符串。 該字符串將插入到輸出文件中。
表達式控制塊以 <#= ... #> 符號分隔。
例如,如果使用下面的控制塊,則輸出文件包含“5”:?
類功能控制塊
類功能控制塊定義屬性、方法或不應包含在主轉換中的所有其他代碼。 類功能塊常用于編寫幫助器函數。 通常,類功能塊位于單獨的文件中,這樣它們可以包含在多個文本模板中。
類功能控制塊以 <#+ ... #> 符號分隔,可以簡單的認為<#+ ...#>定義的內容為我們的類文件
例如,下面的模板文件聲明并使用一個方法:
類功能必須編寫在文件末尾。 不過,即使 include 指令后跟標準塊和文本,也可以 <#@include#> 包含類功能的文件。
類功能塊可以包含文本塊
可以編寫生成文本的方法。
?
?
一名正在搶救的coder
筆名:mangolove
CSDN地址:https://blog.csdn.net/mango_love
GitHub地址:https://github.com/mangoloveYu
總結
- 上一篇: linux下查看硬盘信息、硬盘分区、格式
- 下一篇: WORD拼页、书籍折页、反向书籍折页功能