一.基础概念介绍
T4模板是扩展名为 .tt 的文本文件。 他分为设计时模板 和运行时模板。主要区别在于在vs中右键点击文件,打开“属性”,在“自定义工具”一栏中的值分别如下:
设计时模板: TextTemplatingFileGenerator
运行时模板:TextTemplatingFilePreprocessor
二.模板转换
当然设计时模板可以转为运行时模板,只要将该文件的“自定义工具”属性设置为 TextTemplatingFilePreprocessor即可。
但是运行时模板很多情况下不能转为设计时模板。
三.运行时模板的使用
这里讲解通过C#代码来控制,何时执行T4模板来产生邮件内容,并储存到指定的位置。
1.添加一个T4模板,修改为运行时模板
MultiArticle.tt
<#@ template language="C#" #> <div style="text-align:center;"> <table width="600" cellpadding="0" cellspacing="0" border="0" style="margin:0 auto;"><tbody><tr><td> <div style="600px;text-align:left;font:12px/15px simsun;color:#000;background:#fff;"> <h1><#=Subject #></h2> <table> <# foreach(Article item in ArticleList) { #> <tr><td> <#= item.Title #> </td><td> <#= item.Content #> </td></tr> <# } #> </table> </div> </td></tr></tbody></table> </div>
2.这个模板需要一个实体类表示邮件的内容
一个是以模板名+code结尾:MultiArticleCode.cs,注意类名与模板名要相同,都是MultiArticle。
public class Article { public string Title { get; set; } public string Content { get; set; } } public partial class MultiArticle { public string Subject { get; set; } public List<Article> ArticleList { get; set; } public MultiArticle(string subject, List<Article> articles) { Subject = subject; ArticleList = articles; } }
3.动态执行
static void Main(string[] args) { string subject="最新消息"; var artList=new List<Article>(); for (int i = 0; i < 4; i++) { Article art = new Article(); art.Title = "标题"+i+":"+Guid.NewGuid(); art.Content = "内容" +i+ ":" + Guid.NewGuid(); artList.Add(art); } MultiArticle mod=new MultiArticle(subject,artList); //TransformText方法是模板编译时自动产生的, //这也是前面有提到的,模板MultiArticle.tt的命名要与MultiArticleCode.cs中的类名相同的原因, //利用分部类partial,就可以调用该TransformText方法了。 String pageContent = mod.TransformText(); //将pageContent保存到任何你想保存的地方 System.IO.File.WriteAllText("outputPage.html", pageContent, Encoding.UTF8); }
项目源码下载: