使用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 ...
随机推荐
- k8s的认证和service account简述
k8s的认证: 与API server通信的客户端大致有两类: 1.集群客户端工具(kubectl.kubeadm.kubelet等) 2.集群内pod. 任何客户端访问k8s时的过程: 1.认 ...
- GNU汇编 程序状态字访问指令
.text .global _start _start: mrs r0,cpsr orr r0,#0b100 msr cpsr,r0
- js 发送验证码倒计时
首先写一个按钮: <input type="button" id="btn" value="免费获取验证码" onclick=&quo ...
- Python9-MySQL-pymysql模块-day44
import pymysql user = input('username: ') pwd = input('password: ') conn = pymysql.connect(host=',da ...
- (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)
1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...
- 记忆化搜索:HDU1078-FatMouse and Cheese(记忆化搜索)
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 数据预处理之独热编码(One-Hot Encoding)
问题的由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑以下三个特征: ["male","female"] ["from ...
- ios开发学习笔记040-autolayout 第三方框架Masonry
不管是是界面创建约束还是代码创建约束,苹果官方提供的方式都比较繁琐.所以出现了第三方框架. Masonry 在github地址如下: https://github.com/SnapKit/Masonr ...
- editrules
editrules editrules是用来设置一些可用于可编辑列的colModel的额外属性的.大多数的时候是用来在提交到服务器之前验证用户的输入合法性的.比如editrules:{edith ...
- opendatasource问题
EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO EXEC sp_configure 'Ad Hoc Distributed ...