T4 程序集指令
在 Visual Studio 设计时文本模板中,assembly
指令可加载程序集,以便你的模板代码可使用其类型。 该作用类似于在 Visual Studio 项目中添加程序集引用。
有关编写文本模板的一般概述,请参阅编写 T4 文本模板。
注意
运行时(预处理)文本模板中不需要 assembly
指令。 相反,请将必需的程序集添加到 Visual Studio 项目的“引用”中。
使用 Assembly 指令
该指令的语法如下所示:
<#@ assembly name="[assembly strong name|assembly file name]" #>
程序集名称应为以下各项之一:
GAC 中程序集的强名称,例如
System.Xml.dll
。 还可以使用长形式,例如name="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
。 有关详细信息,请参阅 AssemblyName。程序集的绝对路径
你可以使用
$(variableName)
语法引用 Visual Studio 变量(如$(SolutionDir)
),以及使用%VariableName%
引用环境变量。 例如:
<#@ assembly name="$(SolutionDir)\MyProject\bin\Debug\SomeLibrary.Dll" #>
在预处理文本模板中,assembly 指令无效。 相反,请在 Visual Studio 项目的“引用”部分中包括必需的引用。 有关详细信息,请参阅使用 T4 文本模板的运行时文本生成。
标准程序集
将自动加载以下程序集,您无需为它们编写程序集指令:
Microsoft.VisualStudio.TextTemplating.1*.dll
System.dll
WindowsBase.dll
如果您使用自定义指令,则指令处理器可能会加载其他程序集。 例如,如果您为域特定语言 (DSL) 编写模板,则无需为以下程序集编写程序集指令:
Microsoft.VisualStudio.Modeling.Sdk.1*.dll
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.1*.dsl
Microsoft.VisualStudio.TextTemplating.Modeling.1*.dll
包含 DSL 的程序集。
在 MSBuild 和 Visual Studio 中使用项目属性
Visual Studio 宏(如 $(SolutionDir))在 MSBuild 中不起作用。 如果你想要在生成计算机中转换模板,则必须改用项目属性。
编辑 .csproj 或 .vbproj 文件以定义项目属性。 此示例定义一个名为 myLibFolder
的属性:
<!-- Define a project property, myLibFolder: -->
<PropertyGroup>
<myLibFolder>$(MSBuildProjectDirectory)\..\libs</myLibFolder>
</PropertyGroup>
<!-- Tell the MSBuild T4 task to make the property available: -->
<ItemGroup>
<T4ParameterValues Include="myLibFolder">
<Value>$(myLibFolder)</Value>
</T4ParameterValues>
</ItemGroup>
现在你可在文本模板中使用项目属性,此类模板将在 Visual Studio 和 MSBuild 中正确转换:
<#@ assembly name="$(myLibFolder)\MyLib.dll" #>