語法
主要包括指令、文本塊、控制塊。
1.指令
指令主要包括template, output, assembly, import, include等類型,用以告訴T4引擎如何編譯和運行一個模板。這些指令相當於T4引擎的配置參數。
示例:
<#@ template debug="true" hostspecific="true" language="C#" #>
告訴T4引擎控制塊用c#編寫;
- langeuage:輸出語言,有效值C#、VB,默認為C#
- debug:是否啟用調試,有效值true、false,默認為false。
- hostspecific:有效值true、false,默認為false。如果將此特性的值設置為 true,則會將名為 Host 的屬性添加到由文本模板生成的類中。 該屬性是對轉換引擎的宿主的引用,並聲明為Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost。
- inherits:可以指定模板的程序代碼可以繼承自另一個類,這個類也可以從文本模板生成。目前木有使用過,基本上可以忽略
<#@ output extension=".cs" #>
告訴T4引擎生成文件的后綴名是.cs;
<#@ assembly name="System.Core"#>
告訴T4引擎編譯運行時引用System.Core程序集;
<#@ assembly name="$(SolutionDir)\Project.CodeGenerator\bin\Debug\MySql.Data.Dll" #>
告訴T4引擎引用一個特定的位置上的程序集;
$(SolutionDir):當前項目所在解決方案目錄
$(ProjectDir):當前項目所在目錄
$(TargetPath):當前項目編譯輸出文件絕對路徑
$(TargetDir):當前項目編譯輸出目錄,即web項目的Bin目錄,控制台、類庫項目bin目錄下的debug或release目錄(取決於當前的編譯模式)
舉個例子:比如我們在D盤根目錄建立了一個控制台項目MyTest,解決方案目錄為D:\Feng,項目目錄為
D:\Feng\MyTest,那么此時在Debug編譯模式下
$(SolutionDir)的值為D:\Feng
$(ProjectDir)的值為D:\Feng\MyTest
$(TargetPath)值為D:\Feng\MyTest\bin\Debug\MyTest.exe
$(TargetDir)值為D:\Feng\MyTest\bin\Debug\
<#@ import namespace="System.Data.SqlClient"#>
告訴T4引擎編譯運行時引用某個名稱空間
<#@ include file="../Code/DBSchema.ttinclude"#>
告訴T4引擎編譯運行時引用某個文件,類似於JS的引用
1.2 文本塊
文本塊, T4引擎會將文本塊的內容直接復制到輸出文件中。
1.3 控制塊
控制塊,主要用於控制文本的輸出。在控制塊可以寫任意的C#代碼。
<# 標准控制塊 #> 可以包含語句。
<#= 表達式控制塊 #> 可以包含表達式。
<#+ 類特征控制塊 #> 可以包含方法、字段和屬性,就像一個類的內部
1.4 示例Hello world
#@ template debug="true" hostspecific="true" language="C#" #>
<#@ output extension=".txt" #> Hello, <#Write("World");#>