·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 编写 T4 文本模板

编写 T4 文本模板

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

编写 T4 文本模板

文本模板由以下部件组成:

1)指令 - 控制模板处理方式的元素。

2)文本块 - 直接复制到输出的内容。

3)控制块 - 向文本插入可变值并控制文本的条件或重复部件的程序代码。


指令:

指令是控制模板处理方式的元素,为模板转换引擎提供说明。

T4文本模板指令包括: T4模板指令; T4参数指令; T4输出指令; T4程序集指令; T4导入指令; T4包含指令; T4 CleanUpBehavior 指令及其自定义指令。

指令的语法如下所示:

<#@ DirectiveName [AttributeName = "AttributeValue"] ... #>
  • []:表示为可选参数
  • DirectiveName:指令名
  • AttributeName:特性名
  • AttributeValue:特性值(特性值必须放在双引号内,如果值本身包含引号,则必须使用 \ 字符对这些引号进行转义。)
【指令通常是模板文件或包含的文件中的第一个元素。 不应将它们放置在代码块 <#...#> 内,也不应放置在类功能块 <#+...#> 之后。】

T4模板指令:

<#@ template [language="VB"] [hostspecific="true|TrueFromBase"] [debug="true"] [inherits="templateBaseClass"] [culture="code"] [compilerOptions="options"] [visibility="internal"] [linePRagmas="false"] #>
  1. 模版指令中所有特性均为可选的。
  2. langeuage:输出语言,有效值C#、VB,默认为C#。
  3. debug:是否启用调试,有效值true、false,默认为false。特别说明下这个调试真的不咋地,很容易让VS崩溃,很鸡肋的功能。
  4. hostspecific:有效值true、false,默认为false。如果将此特性的值设置为 true,则会将名为 Host 的属性添加到由文本模板生成的类中。 该属性是对转换引擎的宿主的引用,并声明为Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost。
  5. inherits:可以指定模板的程序代码可以继承自另一个类,这个类也可以从文本模板生成。目前木有使用过,基本上可以忽略。
  6. compilerOptions:有效值为任何有效的编译器选项。基本上可以忽略 。

T4 参数指令:

<#@ parameter type="Full.TypeName" name="ParameterName" #>
  1. type:有效值是传递参数的类型名。
  2. name:传递参数的名。

T4 输出指令:

<#@ output extension=".fileNameExtension" [encoding="encoding"] #>

比较重要的指令,用于设置输出文件的后缀名和文件编码。

  1. extension:输出文件扩展名,默认为".cs"。
  2. encoding:文件编码。

T4 程序集指令:

<#@ assembly name="[assembly strong name|assembly file name]" #>
  1. 程序集指令相当于VS里面我们添加程序集引用的功能,该指令只有一个参数name,用以指定程序集名称,如果程序集已经在GAC里面注册,那么只需要写上程序集名称即可,如<#@ assembly name="System.Data.dll" #>,否则需要指定程序集的物理路径。
  2. T4模版的程序集引用是完全独立的,也就是说我们在项目中引用了一些程序集,然后项目中添加了一个T4模版,T4模版所需要的所有程序集引用必须明确的在模版中使用程序集执行引用才可以。
  3. T4模版自动加载以下程序集Microsoft.VisualStudio.TextTemplating.1*.dll、System.dll、WindowsBase.dll,如果用到了其它的程序集需要显示的使用程序集添加引用才可以。
  4. 可以使用 $(variableName) 语法引用 Visual Studio 或 MSBuild 变量(如 $(SolutionDir)),以及使用 %VariableName% 来引用环境变量。介绍几个常用的$(variableName) 变量:

    $(SolutionDir):当前项目所在解决方案目录

$(ProjectDir):当前项目所在目录

    $(TargetPath):当前项目编译输出文件绝对路径

    $(TargetDir):当前项目编译输出目录,即web项目的Bin目录,控制台、类库项目bin目录下的debug或release目录(取决于当前的编译模式)

$(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\

    举个例子:比如我们在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" #>
  1. filePath 可以是绝对的,或相对于当前模板文件。
  2. filePath 可以包括用“%”分隔的环境变量。 例如:<#@ include file="%HOMEPATH%\MyIncludeFile.t4" #>
  3. 所包含的文件的名称不必使用扩展名“.tt”。可能需要针对包含的文件使用其他扩展名,例如,“.t4”。 这是因为,在您将 .tt 文件添加到项目中时,Visual Studio 会自动将其“自定义工具”属性设置为 TextTemplatingFileGenerator。 您通常不希望单独转换包含的文件。
  4. 在处理时,被包含内容就像是包含文本模板的组成部分一样。 不过,即使 include 指令后为普通文本块和标准控制块,也可以包括含有类功能块 <#+...#> 的文件。
  5. 包含指令可以提高代码复用率,比如我们可以将一些常用的程序集、命名空间引用放到一个文件里,使用时仅需要引用下即可,省去了每次都要重新引用一遍的烦恼,如我们建立Reference.ttinclude文件,里面包含了我们平时常用的程序集引用。
<#@ assembly name="System.Core.dll" #>
						
  • 上一篇文章:
  • 下一篇文章: