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. SpringMVC解决前台传入的数组或集合类型数据

    1前台处理如下: $.ajax({ url:"saveMapInfo", type:"POST", dataType:"json", con ...

  2. mysql查询哪个表数据量最大

    use information_schema;select table_name,table_rows from tables where table_schema='cargo_new' order ...

  3. [Noip2016]换教室(期望+DP)

    Description 题目链接:Luogu Solution 这题结合了DP和概率与期望,其实只要稍微知道什么是期望就可以了, 状态的构造很关键,\(F[i][j][0/1]\)表示已经到第\(i\ ...

  4. vi a.sh ABCD

    E: 无法定位软件包 ubuntu预装的是 vim tiny,安装vim full版本,可以解决 卸载vim-tiny: $ sudo apt-get remove vim-common 安装vim ...

  5. 洛谷P4231 三步必杀

    题目描述: $N$ 个柱子排成一排,一开始每个柱子损伤度为0. 接下来勇仪会进行$M$ 次攻击,每次攻击可以用4个参数$l$ ,$r$ ,$s$ ,$e$ 来描述: 表示这次攻击作用范围为第$l$ 个 ...

  6. 大数模板Java

    import java.util.*; import java.math.BigInteger; public class Main{ public static void main(String a ...

  7. Harbor HA部署-使用Ceph RADOS后端

    1. 前言 Harbor 1.4.0版本开始提供了HA部署方式,和非HA的主要区别就是把有状态的服务分离出来,使用外部集群,而不是运行在本地的容器上.而无状态的服务则可以部署在多个节点上,通过配置上层 ...

  8. 3 View视图 URLconf

    1.视图 视图接受Web请求并且返回Web响应 视图就是一个python函数,被定义在views.py中 响应可以是一张网页的HTML内容,一个重定向,一个404错误等等 响应处理过程如下图: 2 准 ...

  9. “帮你APP”团队冲刺7

    1.整个项目预期的任务量 (任务量 = 所有工作的预期时间)和 目前已经花的时间 (所有记录的 ‘已经花费的时间’),还剩余的时间(所有工作的 ‘剩余时间’) : 所有工作的预期时间:88h 目前已经 ...

  10. SXCPC2018 nucoj2004 国王的怪癖

    可持久化trie.考场上我脑补了一个trie树合并也A了 #include <iostream> #include <cstring> #include <cstdio& ...