1、学习CodeSmith 之 轻松入门

     CodeSmith是一个基于模板的代码生成器 我们可以定义模板来生成任何文本语言的代码。

在定义新模板前我们需要对CodeSmith所提供的集成开发环境有简单的了解 以便于 CodeSmith模板的编辑,编译,运行和管理(请参照联机丛书 F1)    

安装及使用图解教程:http://blog.sina.com.cn/s/blog_49458c27010097d0.html

 

我使用的是CodeSmith Professional 5.0  下载地址:http://www.codesmithtools.com/

 

     CodeSmith Explorer中提供一个简单的界面 管理和执行CodeSmith模板 我们在其 CodeSmith 文件夹下新建一个文件(NewTemplate1.cst)
打开文件(NewTemplate1.cst) 我们将在Template窗口可以看到以下内容 之后将做详细的介绍

 

Code
 ^_^  用过 DONET 的朋友是否觉得这段代码非常熟悉       是的 CodeSmith的语法特征是它的一大强项
 

1、我们可以看出当前为CodeSmith的注释
<%--
Name:
Author:
Description:
--%>
CodeSmith中的注释 有:<%-- Comments --%>
        VB.NET:<%-- 'Comments --%>
        C#:  <%-- // Comments --%>  <%-- /* Comments */ --%>
 
 2、创建好一个模板后第一步要指明模板的一些特性 模板默认使用C#
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
参数的介绍:
    Language
:在开发编写模板时使用的语言,例如C#VB.NETJscript等。
    TargetLanguage
:只是对模板代码的一个分类,不会影响生成的代码语言。
    Description
:对于模板的一些说明信息,在CodeSmith Explorer中选中该模板时会显示这里的信息。
    Inherits
:模板继承 所有CodeSmith模板默认继承自CodeSmith.Engine.CodeTemplate
    Src:在某些方面Src和继承Inherits比较相似,它们都允许你从其他的类包含一些功能进模板。这两个属性的区别是,Src可以让类与你的模板被动态编译,而Inherits仅允许你提供一个已经编译好的类或组件。
    Debug
:可以确定是否在模板中可以包含调试符号。如果将这个属性设置为True,则可以使用System.Diagnostics.Debugger.Break()方法来设置断点。
    LinePragmas
:设置为True,模板的错误将被指向到模板的源代码。设置为False,模板的错误将被指向到编译的源代码。
 

模板在生成代码时的属性,即生成代码需要的输入值变量。

<%@ Property Name="SampleStringProperty" Type="System.String" Default="SomeValue" Optional="True" Category="Strings" Description="This is a sample string property." %>
<%@ Property Name="SampleBooleanProperty" Type="System.Boolean" Default="True" Optional="False" Category="Booleans" Description="This is a sample boolean property." %>

注:声明部分包括CodeTemplate,Property,Assembly,Import,Register,Map,XmlProperty。

 

 


加载组件
<%@ Assembly Name="System.Data" %>
 
在模版中引入一个命名空间,这个与VB.NET中的ImportsC#中的using相同。
<%@ Import Namespace="System.Data" %>
 

输出部分可以划分为两部分:

  1. 固定内容:指的是没有在<%%>中间包括的内容。
  2. 可变内容:在<%%>和<%=%>中间包括的内容

在<%%>中间可以填写的内容为:在模板声明部分的CodeTemplate声明中Language属性所指的语言编写的任何内容,可以定义变量,常量,可以使用各种控制结构,几乎是任何语句都可以,因为CodeSmith毕竟是架构在.Net体系结构中的。


My dynamic content here: "<%= SampleStringProperty %>"
Call a script method: <%= SampleMethod() %>
<% if (SampleBooleanProperty) { %>
My conditional content here.
<% } %>

 

 

 <script runat="template"></script> 类似于.NET中的 <script runat="template"></script>   我们可以在中间定义函数
 

<script runat="template">
// My methods here.

public string SampleMethod()
{
 return "Method output.";
}
</script>

                                                                            Author: Nadim

                                                                            2008/8/15 Friday
 
posted @ 2008-08-15 21:46  Nadim  阅读(2134)  评论(1编辑  收藏  举报