如何使用预构建事件命令行将参数传递给T4模板

5

我需要将预构建事件中的参数传递给我的T4模板。目前,我正在使用以下预构建命令来构建我的T4模板文件,但我无法将参数传递给它。

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\texttransform.exe" "$(ProjectDir)VersionGenerator.tt"

我需要将参数传递给我的VersionGenerator.tt模板。
1个回答

4

使用TextTransform.exe,有一个命令行开关可以传递参数到t4模板:-a,它接受以下格式的参数:

-a [processorName]![directiveName]!<parameterName>!<parameterValue>

在使用时,请考虑以下事项:

  • 可以通过Host.ResolveParameterValue解析参数。
  • processorNamedirectiveName是可选的,您可以省略它们。
  • 即使省略了可选的处理器和指令名称,您仍然需要输入“!”符号。
  • 对于要传递的每个参数,您需要一个 -a开关。
  • 您可以在开关值周围使用""
  • 有关详细信息,请参见使用TextTransform实用程序生成文件

示例

假设您有以下模板Template1.tt

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<# string param1 = this.Host.ResolveParameterValue("", "", "param1"); #>   
param1 : <#= param1 #>

以下命令:
texttransform.exe "Template1.tt" -a "!!param1!value1" 

转化为:

param1 : value1

预生成事件命令行应该是什么?

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\texttransform.exe" "$(ProjectDir)Template1.tt" -a "!!param1!value1"

需要更多参数吗?

只需在模板中定义并使用另一个-a开关将它们传递即可:

texttransform.exe "Template1.tt" -a "!!param1!value1" -a "!!param2!value2"

这个话题有些偏离主题,但你可以考虑以下解决方案来在构建时运行t4模板:在构建过程中调用文本转换 - Reza Aghaei
传递给 this.Host.ResolveParameterValue("", "", "Foo") 的参数名称是否区分大小写?能否请您解释一下。 - Venkat
1
@Venkat 在我的测试中,它显示不区分大小写。 - Reza Aghaei
@Vinod Kumar,既然您是原帖的发布者,如果您能验证答案,那就太好了 :) - Reza Aghaei
我正在使用 try { changeset = this.Host.ResolveParameterValue("-", "-", "changeset");,而这个参数不是我传递的唯一一个参数,而是第二个参数。我像这样传递了2个参数,但只有第二个参数为空...而第一个参数完全正常。同时传递两个参数:-a "!!buildConfiguration!$(ConfigurationName)" -a "!!changeset!asdasd" - iBobb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接