6

我有一个 T4 模板,我试图在运行时将对象值传递给它。

基本上我们想要做的是:

  1. 从 Windows .NET 表单中,将文件作为文本读取

  2. 将外部对象属性设置为文本值

  3. 在具有 .java 输出扩展名的 T4 文本模板中访问该对象属性。

我现在开始非常简单,我只有模板和表单并说一个外部类对象:

流动

当然,阅读表单部分中的文本并设置像 foo.foocode 这样的对象属性是相当简单的。

我只是不知道如何在模板中访问该对象变量或属性,而且我已经研究了一天多。

谢谢

4

1 回答 1

15

在运行时,您只能转换预处理模板,因为模板引擎不是 Visual Studio 的可再分发部分。您可以使用参数指令将对象传递给预处理模板。传递给模板的对象类型必须用SerializableAttribute. 在调用该TransformText()方法之前,将参数的值放入模板会话中。

使用预处理模板时,将忽略输出扩展指令。该TransformText()方法返回一个带有生成代码的字符串。您可以将其保存为您想要的任何文件类型。

<#@ template debug="true" #>
<#@ parameter name="MyObject" type="MyNamespace.MyType" #>

<#
  // now access the passed parameter using
  this.MyObject
#>

调用预处理模板:

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);

希望这可以帮助。

于 2013-03-03T19:25:12.293 回答