【问题标题】:How to pass the parameters to T4 templates using pre build event command line如何使用预构建事件命令行将参数传递给 T4 模板
【发布时间】:2020-04-04 15:42:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# visual-studio msbuild t4 pre-build-event


    【解决方案1】:

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

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

    使用时考虑:

    • 您可以通过Host.ResolveParameterValue解析参数。
    • processorName 和directiveName 是可选的,您可以省略它们。
    • 您总是需要输入“!”标记,即使您省略了可选的处理器和指令名称。
    • 对于您要传递的每个参数,您需要一个-a 开关。
    • 您可以在开关值周围使用""
    • 如需了解更多信息,请查看Generate files with the TextTransform utility

    示例

    假设您有以下模板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
    

    Pre-build event 命令行应该是什么?

    "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 模板:Invoke text transformation in the build process
    • this.Host.ResolveParameterValue("", "", "Foo") 中传递的参数名称是否区分大小写。你能解释一下吗?
    • @Venkat 至少在我的测试中显示它不区分大小写。
    • @Vinod Kumar 因为你是原始发帖人,如果你能验证答案会很棒:)
    • 我正在使用try { changeset = this.Host.ResolveParameterValue("-", "-", "changeset"); ,这个参数是第二个,不是唯一的,我像这样传递了2个参数,只有第二个是空的......而第一个参数完全是美好的。两者都通过:-a "!!buildConfiguration!$(ConfigurationName)" -a "!!changeset!asdasd"
    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 2021-12-25
    • 2012-11-13
    • 2010-09-11
    • 2021-12-18
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    相关资源
    最近更新 更多