2013-02-05 69 views
2

我尝试参数(富)传递给现有的模板(MyTemplate.tt)使用此命令:Mono.TextTemplating参数传递到模板

TextTransform.exe -a = foo的酒吧-o输出。 TXT MyTemplate.tt

MyTemplate.tt:

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

<# 
    this.Write(foo); 
#> 

该命令失败由于参数 “foo” 被不存在。 如何正确传递此参数?

回答

3

MonoDevelop的TextTransform.exe参数与Microsoft的参数相匹配,这些参数被记录为here

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

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

0

谢谢,这工作对我很好!

TextTransform.exe -a = foo的酒吧-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。