单声道.向模板传递参数的TextTemplateing

本文关键字:参数 TextTemplateing 声道 单声道 | 更新日期: 2023-09-27 17:57:52

我尝试用以下命令将参数(foo)传递给现有模板(MyTemplate.tt):

TextTransform.exe-a=foo!bar-o Output.txt MyTemplate.tt

MyTemplate.tt:

<#@ template language="C#" #>
<#@ import namespace="System.IO" #>
<#
  this.Write(foo);  
#>

由于参数"foo"不存在,此命令失败。如何正确传递此参数?

单声道.向模板传递参数的TextTemplateing

MonoDevelop的TextTransform.exe的参数与Microsoft的参数相匹配,这些参数在此处进行了说明。

不幸的是,这些参数并没有作为代码中的变量公开,而是作为自定义指令处理器的参数。要直接从代码访问它们,必须设置hostspecific="true"并通过Host.ResolveParameterValue (paramName)访问它们。

但是,通过在模板的基类上实现IDynamicMetaObjectProvider并重写BindGetMember以解析Host.ResolveParameterValue中的参数,您可以使用动态对象来使示例工作。

谢谢,这对我来说很好:

TextTransform.exe-a=foo!bar-o Output.txt MyTemplate.tt

MyTemplate.tt:

<#@ template language="C#" hostspecific="true" #>
<# string temp = this.Host.ResolveParameterValue("", "", "foo");#>
<#
  this.Write(temp);  
#>

Output.txt:

bar

我还将了解IDynamicMetaObjectProvider。