使用T4模板创建一个例子
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模板创建一个例子的更多相关文章
- 使用maven创建一个例子
创建一个目录:D:\testmaven 在命令行中切换到D:\testmaven目录后输入: mvn archetype:generate 下载骨架,它会往本地工厂存信息 也可以直接使用带有参数的命令 ...
- 通过模板创建一个ABP项目
⒈下载 进入ABP模板页面,选择模板后下载 ⒉运行 1.初始化数据库 修改xxxx.Migrator.xxxx.Web.Host appsettings.json中的连接字符串 2.还原数据库 在Nu ...
- 如何用Maven创建一个普通Java项目
一下内容包括:用Maven创建一个普通Java项目,并把该项目转成IDEA项目,导入到IDEA,最后把这个项目打包成一个jar文件. 有时候运行mvn命令失败,重复运行几次就OK了,无解(可能因为网络 ...
- 使用T4模板生成代码的学习
之前做项目使用的都是Db First,直接在项目中添加Entity Framework,使用T4模板(T4模板引擎之基础入门)生成DAL BLL层等(T4模板是一个同事给的,也没有仔细研究,代码如下: ...
- 03_Weblogic之配置简单域:启动和配置域,使用模板创建域,使用控制台
1 域:概览 是Oracle Weblogic Server的基本管理单元 始终包含一个配置为管理服务器的Oracle WebLogic Server实例 域中可以包括一些称为受管服务器的Ora ...
- T4 模板自动生成带注释的实体类文件 - 只需要一个 SqlSugar.dll
生成实体就是这么简单,只要建一个T4文件和 文件夹里面放一个DLL. 使用T4模板教程 步骤1 创建T4模板 ,一定要自已新建,把T4代码复制进去,好多人因为用我现成的T4报错(原因不明) 点击添加文 ...
- 【3】创建一个简单的Laravel例子
现在我们来创建一个Laravel的例子来帮助理解 1.首先打开app/Http/routes.php文件,在里边写上一条路由: 2.创建一个控制器,有两种方法 ①在app/Http/Controlle ...
- OpenCms JSP 模板开发——创建一个简单的JSP模板
OpenCms中的JSP模板就是一个普通的JSP页面,在特定的位置使用标签来包含内容,在这个的例子中,我们将要开发一个简单JSP模板,这个模板只是在内容(如<html>.<body& ...
- 模板模式创建一个poi导出功能
之前的导出都很乱,直接写在代码中,等到下回还使用导出功能时又不知如何下手,今天用模板模式重写了一个导出功能,方便以后使用: package com.sf.addrCheck.util.export.p ...
随机推荐
- Dire Wolf HDU - 5115(区间dp)
Dire Wolf Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Total ...
- L1-039 古风排版 (20 分)
L1-039 古风排版 (20 分) 中国的古人写文字,是从右向左竖向排版的.本题就请你编写程序,把一段文字按古风排版. 输入格式: 输入在第一行给出一个正整数N(<),是每一列的字符数.第 ...
- Python基础闯关失败总结
对列表进行创建切片增删改查 对列表进行创建 L1 = [] # 定义L1 为一个空列表 List() #创建List 空列表 对列表进行查询 L2 = ['a','b','c','d','a','e ...
- MySQL基础4-SQL简单查询(单表)
1.SELECT语句 2.运算符的优先级 利用Navicat中的查询方法: 栗子1:查询所有货品信息 栗子2:查询所有货品的id,productName,salePrice 当查询错误的时候出现的界面 ...
- session为什么需要持久化
为什么需要持久化: 客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间.如果在某一时间段内 ...
- loj2035 「SDOI2016」征途
学了斜率优化这题就能一气呵成地做出来啦qwqqwq #include <iostream> #include <cstdio> using namespace std; typ ...
- Windows Server 2012之活动目录域服务的卸载
Windows Server 2012之活动目录域服务的卸载 2012-07-11 06:27:35 标签:Windows Server 2012 活动目录域服务 卸载 原创作品,允许转载,转载时请务 ...
- Python基础-week07 Socket网络编程
一 客户端/服务器架构 1.定义 又称为C/S架构,S 指的是Server(服务端软件),C指的是Client(客户端软件) 本章的中点就是教大写写一个c/s架构的软件,实现服务端软件和客户端软件基于 ...
- Spring boot 整合jsp、thymeleaf、freemarker
1.创建spring boot 项目 2.pom文件配置如下: <dependencies> <dependency> <groupId>org.springfra ...
- Python 拓展之推导式
写在之前 推导式是从一个或多个迭代器快速简洁的创建数据结构的一种办法,它可以将循环和条件判断结合,从而可以避免语法冗长的代码. 列表推导式 我在之前的文章中(零基础学习 Python 之 for 循环 ...