2013-02-05 68 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。