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

使用T4模板创建一个例子的更多相关文章

  1. 使用maven创建一个例子

    创建一个目录:D:\testmaven 在命令行中切换到D:\testmaven目录后输入: mvn archetype:generate 下载骨架,它会往本地工厂存信息 也可以直接使用带有参数的命令 ...

  2. 通过模板创建一个ABP项目

    ⒈下载 进入ABP模板页面,选择模板后下载 ⒉运行 1.初始化数据库 修改xxxx.Migrator.xxxx.Web.Host appsettings.json中的连接字符串 2.还原数据库 在Nu ...

  3. 如何用Maven创建一个普通Java项目

    一下内容包括:用Maven创建一个普通Java项目,并把该项目转成IDEA项目,导入到IDEA,最后把这个项目打包成一个jar文件. 有时候运行mvn命令失败,重复运行几次就OK了,无解(可能因为网络 ...

  4. 使用T4模板生成代码的学习

    之前做项目使用的都是Db First,直接在项目中添加Entity Framework,使用T4模板(T4模板引擎之基础入门)生成DAL BLL层等(T4模板是一个同事给的,也没有仔细研究,代码如下: ...

  5. 03_Weblogic之配置简单域:启动和配置域,使用模板创建域,使用控制台

     1 域:概览 是Oracle Weblogic Server的基本管理单元 始终包含一个配置为管理服务器的Oracle WebLogic Server实例 域中可以包括一些称为受管服务器的Ora ...

  6. T4 模板自动生成带注释的实体类文件 - 只需要一个 SqlSugar.dll

    生成实体就是这么简单,只要建一个T4文件和 文件夹里面放一个DLL. 使用T4模板教程 步骤1 创建T4模板 ,一定要自已新建,把T4代码复制进去,好多人因为用我现成的T4报错(原因不明) 点击添加文 ...

  7. 【3】创建一个简单的Laravel例子

    现在我们来创建一个Laravel的例子来帮助理解 1.首先打开app/Http/routes.php文件,在里边写上一条路由: 2.创建一个控制器,有两种方法 ①在app/Http/Controlle ...

  8. OpenCms JSP 模板开发——创建一个简单的JSP模板

    OpenCms中的JSP模板就是一个普通的JSP页面,在特定的位置使用标签来包含内容,在这个的例子中,我们将要开发一个简单JSP模板,这个模板只是在内容(如<html>.<body& ...

  9. 模板模式创建一个poi导出功能

    之前的导出都很乱,直接写在代码中,等到下回还使用导出功能时又不知如何下手,今天用模板模式重写了一个导出功能,方便以后使用: package com.sf.addrCheck.util.export.p ...

随机推荐

  1. 如何在 Linux 中配置基于密钥认证的 SSH

    什么是基于 SSH 密钥的认证? 众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和远程系统之间安全访问/通信的加密网络协议.无论何时使用 SSH 在 ...

  2. 绘制文字:imagettftext()

    <?php //1. 绘制图像资源(创建一个画布) $image = imagecreatetruecolor(500, 300); //2. 先分配一个绿色 $green = imagecol ...

  3. Vue钩子函数生命周期实例详解

    vue生命周期简介 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁 ...

  4. MySQL存储引擎MyISAM与InnoDB的区别比较

    使用MySQL当然会接触到MySQL的存储引擎,在新建数据库和新建数据表的时候都会看到. MySQL默认的存储引擎是MyISAM,其他常用的就是InnoDB了. 至于到底用哪种存储引擎比较好?这个问题 ...

  5. wampserver怎么设置外网可访问

    wampserver配置httpd.conf允许外网访问? 在电脑上开启wamp服务后,默认是禁止外部网络访问的,如果您想要同一局域网中的设备能够访问PC上的web项目,则需要对httpd.conf文 ...

  6. python编写定时执行脚本

    前几天在抓博客园文章,打算每天抓10条最新的,所以就在脚本中加了定时让它在每天凌晨四点中时执行,但是昨天发现,报错了: 显示是远程主机强制关闭了一个链接, 原因是:mysql数据库默认当连续8小时不对 ...

  7. 使用Hbase快照将数据输出到互联网区测试环境的临时Hbase集群

    通过snapshot对内网测试环境Hbase生产集群的全量数据(包括原始数据和治理后数据)复制到互联网Hbase临时集群.工具及原理: 1)         Hbase自带镜像导出工具(snapsho ...

  8. Codeforces Round #460 (Div. 2)-B. Perfect Number

    B. Perfect Number time limit per test2 seconds memory limit per test256 megabytes Problem Descriptio ...

  9. 11、python中的函数(基础)

    一.什么是函数? 在数学中,x2+2x2+3=10这样的叫方程. 而ax2+bx2+c=d这样的才叫函数.数学的函数中,abcd等待输入的未知量叫自变量,它需要我们自己去输入,而x这种待求得未知量叫因 ...

  10. s debug

    value stack contents   ognl 值栈 stack context           action上下文 action上下文是一个map对象,通过#key获得对象内容,在#re ...