使用T4模板创建一个例子
2024-08-23 12:52:09
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
最新文章
- 保护ASP.NET 应用免受 CSRF 攻击
- testlink简单部署
- QFile文件操作-QT
- 链表操作,空间复杂度要求为O(1)
- C# 排列组合
- crontab 定时任务格式
- Java 初学者帮助文档以及基础教程
- NFS : device is busy
- VMware静态地址上网
- XSS Stored 测试
- cron定时任务
- WebService实例-CRM系统提供WebService实现用户注册功能
- JS 之 阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别
- ubuntu 安装pip3 遇到Ignoring ensurepip failure: pip 8.1.1 requires SSL/TLS错误
- ArcGIS案例学习笔记-点集中最近点对和最远点对
- log4j的日志级别(ssm中log4j的配置)
- spark优化之并行度
- numRecordsIn 在哪里实现?
- DevOps工具链
- [C#]画图全攻略(饼图与柱状图)(转)
热门文章
- 第9课 文章模块分析及建表 Thinkphp5商城第四季
- stark组件(2):提取公共视图函数、URL分发和设置别名
- Codeforces Round #462 (Div. 2) A Compatible Pair
- Java并发模型框架
- 朴素贝叶斯python小样本实例
- laravel5.2总结--csrf保护
- 网络安全巧设置 Win2008 R2 防火墙详解(1)
- Careercup - Microsoft面试题 - 4639756264669184
- 【Remove Duplicates from Sorted List II 】cpp
- Robotium测试报告的生成方法(上)