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
<%--
Name:
Author:
Description:
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits=""
%>
<
script runat
=
"
template
"
>
//
My methods here.
public
string
SampleMethod()
{
return "Method output.";
}
</
script
>
^_^ 用过 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.NET,
Jscript等。
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中的Imports和C#中的using相同。
<%@ Import Namespace="System.Data" %>
输出部分可以划分为两部分:
-
固定内容:指的是没有在<%%>中间包括的内容。
-
可变内容:在<%%>和<%=%>中间包括的内容
在<%%>中间可以填写的内容为:在模板声明部分的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