1、创建项目,添加新项,名称处填写Messages.tt,如下图:

添加后,Messages.tt文件内容如下:

 <#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".txt" #>

2、创建一个实体对象MessageEntry,用以传递模版信息,具体代码如下:

     public class MessageEntry
{
public string Id { get; private set; }
public string Value { get; private set; }
public string Category { get; private set; }
public MessageEntry(string id, string value, string category)
{
this.Id = id;
this.Value = value;
this.Category = category;
} public string Format(params object[] args)
{
return string.Format(this.Value, args);
}
}

MessageEntry.cs

3、新建文件Messages.xml,用以配置要生成的信息:

 <?xml version="1.0" encoding="utf-8" ?>
<messages>
<message id="MandatoryField" value="The {0} is mandatory." category="Validation"/>
<message id="GreaterThan" value="The {0} must be greater than {1}." category="Validation"/>
<message id="ReallyDelete" value="Do you really want to delete the {0}." category="Confirmation"/>
<message id="UserInfo" value="Do you really want to delete the {0}." category="UserItemInfo"/>
</messages>

Messages.xml

4、修改Messages.tt文件如下:

 <#@template debug="false" hostspecific="true" language="C#"#>
<#@assembly name="System.Core.dll"#>
<#@assembly name="System.Xml"#>
<#@import namespace="System"#>
<#@import namespace="System.Xml"#>
<#@import namespace="System.Linq"#>
<#@output extension=".cs" #>
namespace MessageCodeGenrator
{
using System;
public static class Messages
{
<# XmlDocument messageDoc = new XmlDocument();
messageDoc.Load(this.Host.ResolvePath("Messages.xml"));
var messageEntries = messageDoc.GetElementsByTagName("message").Cast<XmlElement>();
var categories = (from element in messageEntries
select element.Attributes["category"].Value).Distinct();
foreach (var category in categories)
{#> public static class <#= category#>
{
<#
foreach (var element in messageDoc.GetElementsByTagName("message").Cast<XmlElement>().Where(element => element.Attributes["category"].Value == category))
{
string id = element.Attributes["id"].Value;
string value = element.Attributes["value"].Value;
string categotry = element.Attributes["category"].Value;
#> public static MessageEntry <#= id #> = new MessageEntry("<#= id #>","<#= value#>","<#= categotry#>");
<#}#>
}
<#}#>
}
}

Messages.tt

5、右键点击Messages.tt,选择运行自定义工具,如下:

6、执行完后,查看Messages.cs文件,可以看到已经生成了所需要的代码:

 namespace MessageCodeGenrator
{
using System;
public static class Messages
{ public static class Validation
{ public static MessageEntry MandatoryField = new MessageEntry("MandatoryField","The {0} is mandatory.","Validation"); public static MessageEntry GreaterThan = new MessageEntry("GreaterThan","The {0} must be greater than {1}.","Validation");
} public static class Confirmation
{ public static MessageEntry ReallyDelete = new MessageEntry("ReallyDelete","Do you really want to delete the {0}.","Confirmation");
} public static class UserItemInfo
{ public static MessageEntry UserInfo = new MessageEntry("UserInfo","Do you really want to delete the {0}.","UserItemInfo");
}
}
}

Messages.cs

最新文章

  1. 保护ASP.NET 应用免受 CSRF 攻击
  2. testlink简单部署
  3. QFile文件操作-QT
  4. 链表操作,空间复杂度要求为O(1)
  5. C# 排列组合
  6. crontab 定时任务格式
  7. Java 初学者帮助文档以及基础教程
  8. NFS : device is busy
  9. VMware静态地址上网
  10. XSS Stored 测试
  11. cron定时任务
  12. WebService实例-CRM系统提供WebService实现用户注册功能
  13. JS 之 阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别
  14. ubuntu 安装pip3 遇到Ignoring ensurepip failure: pip 8.1.1 requires SSL/TLS错误
  15. ArcGIS案例学习笔记-点集中最近点对和最远点对
  16. log4j的日志级别(ssm中log4j的配置)
  17. spark优化之并行度
  18. numRecordsIn 在哪里实现?
  19. DevOps工具链
  20. [C#]画图全攻略(饼图与柱状图)(转)

热门文章

  1. 第9课 文章模块分析及建表 Thinkphp5商城第四季
  2. stark组件(2):提取公共视图函数、URL分发和设置别名
  3. Codeforces Round #462 (Div. 2) A Compatible Pair
  4. Java并发模型框架
  5. 朴素贝叶斯python小样本实例
  6. laravel5.2总结--csrf保护
  7. 网络安全巧设置 Win2008 R2 防火墙详解(1)
  8. Careercup - Microsoft面试题 - 4639756264669184
  9. 【Remove Duplicates from Sorted List II 】cpp
  10. Robotium测试报告的生成方法(上)