1、创建项目,添加新项,名称处填写Messages.tt,如下图:
添加后,Messages.tt文件内容如下:
1 <#@ template debug="false" hostspecific="false" language="C#" #> 2 <#@ output extension=".txt" #>
2、创建一个实体对象MessageEntry,用以传递模版信息,具体代码如下:
1 public class MessageEntry 2 { 3 public string Id { get; private set; } 4 public string Value { get; private set; } 5 public string Category { get; private set; } 6 public MessageEntry(string id, string value, string category) 7 { 8 this.Id = id; 9 this.Value = value; 10 this.Category = category; 11 } 12 13 public string Format(params object[] args) 14 { 15 return string.Format(this.Value, args); 16 } 17 }
3、新建文件Messages.xml,用以配置要生成的信息:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <messages> 3 <message id="MandatoryField" value="The {0} is mandatory." category="Validation"/> 4 <message id="GreaterThan" value="The {0} must be greater than {1}." category="Validation"/> 5 <message id="ReallyDelete" value="Do you really want to delete the {0}." category="Confirmation"/> 6 <message id="UserInfo" value="Do you really want to delete the {0}." category="UserItemInfo"/> 7 </messages>
4、修改Messages.tt文件如下:
1 <#@template debug="false" hostspecific="true" language="C#"#> 2 <#@assembly name="System.Core.dll"#> 3 <#@assembly name="System.Xml"#> 4 <#@import namespace="System"#> 5 <#@import namespace="System.Xml"#> 6 <#@import namespace="System.Linq"#> 7 <#@output extension=".cs" #> 8 namespace MessageCodeGenrator 9 { 10 using System; 11 public static class Messages 12 { 13 <# XmlDocument messageDoc = new XmlDocument(); 14 messageDoc.Load(this.Host.ResolvePath("Messages.xml")); 15 var messageEntries = messageDoc.GetElementsByTagName("message").Cast<XmlElement>(); 16 var categories = (from element in messageEntries 17 select element.Attributes["category"].Value).Distinct(); 18 foreach (var category in categories) 19 {#> 20 21 public static class <#= category#> 22 { 23 <# 24 foreach (var element in messageDoc.GetElementsByTagName("message").Cast<XmlElement>().Where(element => element.Attributes["category"].Value == category)) 25 { 26 string id = element.Attributes["id"].Value; 27 string value = element.Attributes["value"].Value; 28 string categotry = element.Attributes["category"].Value; 29 #> 30 31 public static MessageEntry <#= id #> = new MessageEntry("<#= id #>","<#= value#>","<#= categotry#>"); 32 <#}#> 33 } 34 <#}#> 35 } 36 }
5、右键点击Messages.tt,选择运行自定义工具,如下:
6、执行完后,查看Messages.cs文件,可以看到已经生成了所需要的代码:
1 namespace MessageCodeGenrator 2 { 3 using System; 4 public static class Messages 5 { 6 7 public static class Validation 8 { 9 10 public static MessageEntry MandatoryField = new MessageEntry("MandatoryField","The {0} is mandatory.","Validation"); 11 12 public static MessageEntry GreaterThan = new MessageEntry("GreaterThan","The {0} must be greater than {1}.","Validation"); 13 } 14 15 public static class Confirmation 16 { 17 18 public static MessageEntry ReallyDelete = new MessageEntry("ReallyDelete","Do you really want to delete the {0}.","Confirmation"); 19 } 20 21 public static class UserItemInfo 22 { 23 24 public static MessageEntry UserInfo = new MessageEntry("UserInfo","Do you really want to delete the {0}.","UserItemInfo"); 25 } 26 } 27 }