问:为什么要用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()

{}

}

}

最新文章

  1. Java中关于String类型的10个问题
  2. Unity中的Matrix4x4类
  3. Linux安装Memcached服务
  4. Java学习——Java运算符
  5. ASP.NET MVC3 实例(六) 增加、修改和删除操作(二)
  6. “Request Entity Too Large” 上传图片出现大小限制
  7. 微软正式公布Visual Studio 2013 Update 3 (2013.3) RTM
  8. JAVA虚拟机内存模型
  9. redis----查询keys(模糊匹配)
  10. 从头开始基于Maven搭建SpringMVC+Mybatis项目(2)
  11. 带着新人学springboot的应用01(springboot+mybatis+缓存 上)
  12. Vue:如何在地图上添加自定义覆盖物(点)
  13. Python与R的区别和联系
  14. 路由导航之第一个子模块(HomeModule)
  15. ps和top的区别,以及各参数意思
  16. Eclipse下配置TinyOS开发环境
  17. 记一次js之button问题
  18. UITextView 和 UITextField限制字符数和表情符号
  19. html表单的各种输入控件
  20. C++11的左值引用与右值引用总结

热门文章

  1. rhel6.4 using centos source
  2. htm初学笔记
  3. ASP.Net用jQuery ajax实现页面局部刷新
  4. 如何在webstrom中配置eslint和less
  5. jquery1.9学习笔记 之层级选择器(一)
  6. 在PHP中开启CURL扩展,使其支持curl()函数
  7. USB 调试工具(python2.7 + Tkinter + pyusb/pywinusb)
  8. vim的命令集合
  9. C/C++ char和int的区别
  10. UCOS 信号量