我有一个T4模板,我试图在运行时传递对象值。
基本上我们要做的是:
从Windows .NET表单中,以文本形式读取文件
将外部对象属性设置为文本值
在具有输出的T4文本模板中访问该对象属性 扩展.java。
我现在开始非常简单,我只有模板和表单并说出一个外部类对象:
当然,阅读表单部分中的文本并设置像foo.foocode这样的对象属性是相当简单的。
我无法弄清楚如何在模板中访问该对象变量或属性,而且我已经看了一天多了..
由于
答案 0 :(得分:15)
在运行时,您只能转换预处理的模板,因为模板引擎不是Visual Studio的可再发行组件。您可以使用parameter directive将对象传递给预处理的模板。传递给模板的对象类型必须使用SerializableAttribute
进行修饰。在调用TransformText()
方法之前,将参数的值放入模板会话中。
使用预处理模板时,将忽略输出扩展指令。 TransformText()
方法返回包含生成代码的字符串。您可以将其保存为您想要的任何文件类型。
<#@ template debug="true" #>
<#@ parameter name="MyObject" type="MyNamespace.MyType" #>
<#
// now access the passed parameter using
this.MyObject
#>
调用preprocessedTemplate:
var templateInstance = new MyTemplate();
templateInstance.Session = new Dictionary<string, object>();
templateInstance.Session.Add("MyObject", new MyType());
templateInstance.Initialize();
var generatedCode = templateInstance.TransformText();
System.IO.File.WriteAllText("outputfile.java", generatedCode);
希望这有帮助。