加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将对象传递给T4文本模板

发布时间:2020-12-15 18:01:26 所属栏目:百科 来源:网络整理
导读:我有一个T4模板,我试图在运行时传递对象值. 基本上我们要做的是: 从Windows .NET表单中,将文件作为文本读取 将外部对象属性设置为文本值 在具有输出的T4文本模板中访问该对象属性 扩展.java. 我现在开始很简单,我只有模板和表单,并说一个外部类对象: 当然,
我有一个T4模板,我试图在运行时传递对象值.

基本上我们要做的是:

>从Windows .NET表单中,将文件作为文本读取
>将外部对象属性设置为文本值
>在具有输出的T4文本模板中访问该对象属性
扩展.java.

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

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

我只是无法弄清楚如何访问模板中的对象变量或属性,我已经看了一天多了..

谢谢

解决方法

在运行时,您只能转换预处理的模板,因为模板引擎不是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);

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读