2

I try to pass a parameter(foo) to an existing template(MyTemplate.tt) with this command:

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

MyTemplate.tt:

<#@ template language="C#" #>
<#@ import namespace="System.IO" #>

<#
  this.Write(foo);  
#>

This command fails due to the parameter "foo" is not existing. How can I pass this parameter correctly?

4

2 回答 2

3

MonoDevelop 的 TextTransform.exe 的参数与 Microsoft 的相匹配,在此处记录。

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

但是,您可以使用动态对象来使您的示例工作,方法是在模板的基类上实现IDynamicMetaObjectProvider并覆盖BindGetMember以解析来自Host.ResolveParameterValue.

于 2013-02-05T20:11:23.210 回答
0

谢谢,这对我来说很好:

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

我的模板.tt:

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

输出.txt:

bar

我还将看看 IDynamicMetaObjectProvider。

于 2013-02-06T08:41:15.383 回答