问:为什么要用CodeSmith?
答曰:因为我懒的写。
Codesmith是一款非常不错的懒人工具,我也经常会用到,因为它在“重复代码”方面能够节省我们很多时间,并且解除了我们重复繁琐并且乏味的“码功”。
因为我只讲使用方法,所以他的工作原理我就很不负责的不解释了。这是第一篇,我们就来创建一个最简单的模板--填入类名生成一个空类。
关键语句一:
<%@ Template Language="C#" TargetLanguage="C#" Description="这是一个测试模板" %>
这条语句定义了当前文档是一个模板
Template 指定了这一条语句是模板定义语句。就像一个标记一样,指定这条语句要定义一个模板了。
Language 定义了编写这个模板要用到的语言。模板中你总得用个If或for之类的语句吧,这些语句的格式是哪种语言的就是他这里定义的了。
TargetLanguage 则定义了要显示的内容的语言,有了它才有代码的高亮,比如你生成的是C#的代码,但是你要用VB代码的关键字来高亮显示这肯定不好看啦。
定义好了模板,我们就开始定义一个可以让我们输入的属性,
<%@ Property Name="NameSpace" Type="System.string" Default="GodFinal" Category="命名空间" Description="类的命名空间"%>
这条语句为我们创建了一个可用于输入字符串的属性。
Property 指明了当前语句是一条属性语句,它定义了属性字段,我们可以在生成模板的时候传一些特定的值。如图:
Name 是要显示的属性名。
Type 是属性值的类型,它来自于System命名空间或者CodeSmith自定义的命名空间,CodeSmith会自动导入一些默认的命名空间如下图:
Default是属性的默认值,如果你不想填,那就会显示默认的了。
Category 为属性所在的分类,相同分类的属性会显示在一个列表中。
定义好了这些,接下来我们就可以写要输出的代码了,直接输出的文字直接写就可以,要用到属性值的地方需要加<%= %>的取值标记,类似<%=NameSpace %>就是取了Name为NameSpace的属性的值。
最终模板:
<%--
Name: 测试模板1
Author: GodFinal
Description: 这是第一个测试模板
blog: http://www.cnblogs.com/GodFinal
--%>
<%--Language 为模板编写语言 TargetLanguage 为模板标记语言,就是显示高亮的语言--%>
<%@ Template Language="C#" TargetLanguage="c#" Description="这是一个测试模板" %>
<%--模板属性,就是生成之前我们要传入的值。--%>
<%@ Property Name="NameSpace" Type="System.string" Default="GodFinal" Category="命名空间" Description="类的命名空间"%>
<%@ Property Name="ClassName" Type="System.string" Default="Model" Category="类别名" Description="类名" %>
using System;
namespace <%=NameSpace %> <%--调用定义好的属性--%>
{
/// <summary>
/// <%=ClassName %>类的模板
/// </summary>
public class <%=ClassName %>
{
public <%=ClassName %>()
{}
}
}
运行结果:
using System;
namespace GodFinal
{
/// <summary>
/// Model类的模板
/// </summary>
public class Model
{
public Model()
{}
}
}