• 使用T4模板创建一个例子


    1、创建项目,添加新项,名称处填写Messages.tt,如下图:

    添加后,Messages.tt文件内容如下:

    1 <#@ template debug="false" hostspecific="false" language="C#" #>
    2 <#@ output extension=".txt" #>

    2、创建一个实体对象MessageEntry,用以传递模版信息,具体代码如下:

     1     public class MessageEntry
     2     {
     3         public string Id { get; private set; }
     4         public string Value { get; private set; }
     5         public string Category { get; private set; }
     6         public MessageEntry(string id, string value, string category)
     7         {
     8             this.Id = id;
     9             this.Value = value;
    10             this.Category = category;
    11         }
    12 
    13         public string Format(params object[] args)
    14         {
    15             return string.Format(this.Value, args);
    16         }
    17     }
    MessageEntry.cs

    3、新建文件Messages.xml,用以配置要生成的信息:

    1 <?xml version="1.0" encoding="utf-8" ?>
    2 <messages>
    3     <message id="MandatoryField" value="The {0} is mandatory." category="Validation"/>
    4     <message id="GreaterThan" value="The {0} must be greater than {1}." category="Validation"/>
    5     <message id="ReallyDelete" value="Do you really want to delete the {0}." category="Confirmation"/>
    6     <message id="UserInfo" value="Do you really want to delete the {0}." category="UserItemInfo"/>
    7 </messages>
    Messages.xml

    4、修改Messages.tt文件如下:

     1 <#@template debug="false" hostspecific="true" language="C#"#>
     2 <#@assembly name="System.Core.dll"#>
     3 <#@assembly name="System.Xml"#>
     4 <#@import namespace="System"#>
     5 <#@import namespace="System.Xml"#>
     6 <#@import namespace="System.Linq"#>
     7 <#@output extension=".cs" #>
     8 namespace MessageCodeGenrator
     9 {
    10     using System;
    11     public static class Messages
    12     {
    13         <# XmlDocument messageDoc = new XmlDocument();
    14             messageDoc.Load(this.Host.ResolvePath("Messages.xml"));
    15             var messageEntries = messageDoc.GetElementsByTagName("message").Cast<XmlElement>();
    16             var categories = (from element in messageEntries
    17                             select element.Attributes["category"].Value).Distinct();
    18             foreach (var category in categories)
    19             {#>
    20 
    21         public static class <#=  category#>
    22         {
    23             <#
    24             foreach (var element in messageDoc.GetElementsByTagName("message").Cast<XmlElement>().Where(element => element.Attributes["category"].Value == category))
    25             {
    26                 string id = element.Attributes["id"].Value;
    27                 string value = element.Attributes["value"].Value;
    28                 string categotry = element.Attributes["category"].Value;
    29             #>
    30 
    31             public static MessageEntry <#= id #> = new MessageEntry("<#= id #>","<#= value#>","<#= categotry#>");
    32         <#}#>
    33 }
    34     <#}#>
    35 }
    36 }
    Messages.tt

    5、右键点击Messages.tt,选择运行自定义工具,如下:

    6、执行完后,查看Messages.cs文件,可以看到已经生成了所需要的代码:

     1 namespace MessageCodeGenrator
     2 {
     3     using System;
     4     public static class Messages
     5     {
     6         
     7         public static class Validation
     8         {
     9             
    10             public static MessageEntry MandatoryField = new MessageEntry("MandatoryField","The {0} is mandatory.","Validation");
    11         
    12             public static MessageEntry GreaterThan = new MessageEntry("GreaterThan","The {0} must be greater than {1}.","Validation");
    13         }
    14     
    15         public static class Confirmation
    16         {
    17             
    18             public static MessageEntry ReallyDelete = new MessageEntry("ReallyDelete","Do you really want to delete the {0}.","Confirmation");
    19         }
    20     
    21         public static class UserItemInfo
    22         {
    23             
    24             public static MessageEntry UserInfo = new MessageEntry("UserInfo","Do you really want to delete the {0}.","UserItemInfo");
    25         }
    26     }
    27 }
    Messages.cs
  • 相关阅读:
    寒露将至,略有所感:过河卒 DP入门
    linux 内核中EXPORT_SYMBOL()分析与实践
    Educational Codeforces Round 116 (Rated for Div. 2)
    Educational Codeforces Round 115 (Rated for Div. 2)
    学习笔记:UML类图
    论文阅读笔记Fully Functional Image Manipulation Using Scene Graphs in A Bounding-Box Free Way
    图像质量评价(六)主观评价 subjective ?还没写完
    image manipulation综述
    论文阅读笔记stargan
    10.14-11.7第一轮文献调研内容
  • 原文地址:https://www.cnblogs.com/ziranquliu/p/4794561.html
Copyright © 2020-2023  润新知