CodeSmith使用方法

CodeSmith(1):使用和语法简介

http://www.cnblogs.com/duanzt/archive/2005/12/31/308665.html

下载:

官方网站:http://www.codesmithtools.com/

5.0破解文件下载:http://kewlshare.com/dl/0538fcf454d3/CodeSmith.5.0.Professional.Incl.Patch.DTCG.rar.html

 

资料:

http://blog.sina.com.cn/s/articlelist_1229294631_3_1.html

http://www.cnblogs.com/Terrylee/category/44974.html

 

http://www.cnblogs.com/huangcong/archive/2010/06/14/1757957.html 

 

http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html

 

 

CodeSmith生成代码的基础为数据库,生成代码依赖于你编写的模板。

模板分成三部分:声明,输出,函数。

声明部分包括

CodeTemplate,Property,Assembly,Import,Register,Map,XmlProperty。

CodeTemplate声明:

CodeTemplate声明的属性

 

Language

语言

编写输出和函数部分使用的语言 

 

TargetLanguage

目标语言

生成代码的语言 

 

Src

源文件

模板中使用的类文件名称 

 

 

Inherits

继承的类

模板继承自的类名 

 

Debug

调试

是否需要调试 

 

Description

描述

简介 

ResponseEncoding

输出编码格式

设置输出内容的编码格式 

 

             

LinePragmas:设置为True,模板的错误将被指向到模板的源代码。设置为False,模板的错误将被指向到编译的源代码。

CodeTemplate声明为必选声明。

Language:一般可以使用C#,VB,JScript等语言,此处要慎重,尽量选择熟悉的语言。

TargetLanguage:通过模板生成的代码的语言,一般来说,无关紧要,但还是尽量实事求是的写吧,因为CodeSmith需要这个属性来给代码着色。

Src和Inherits:这两个Src写的是源文件名称路径,Inherits写的是继承的父类名称。这两个属性可以不设置。

Debug:可选True或False,用来决定是否调试,简单模板一般设置为False。

ResponseEncoding:如果要让你的模板生成的内容中包括中文,那么设置这个属性为UTF-8。

例:

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Src="" Inherits="" Debug="False" Description="产生实体类" ResponseEncoding="UTF-8" %>

Property声明:

属性被用做在模板运行时声明一个使用的参数

 

Name

名称

模版使用的参数的名称,类似变量名称

 

 

Type

类型

类似变量类型,System.String,String都行

 

Default

默认值

默认值

 

Optional

是否可选

Bool类型,True:可选,False:必选

 

Category

分组名称

 

 

Description

描述

 在属性面板中对于这个属性的描述

             

    Type:参数类型可以是任何.NET有效的数据类型,例如简单的String类型或者是CodeSmith的SchemaExplorer.DatabaseSchema类型。注意,类型必须是基类库的类型,例如用String或者Int32代替string和int。

    Category:用来说明这个属性在CodeSmith Explorer的属性面板中显示成什么类型,例如下拉选择、直接输入等。

    Optional:设置这个属性是否是必须的,设置为True表明这个参数值可有可无,设置为False则这个参数必须有值。

    Editor:表明在属性面板中输入这个属性的值时使用何种GUI(图形界面编辑器)编辑器。

    EditorBase:编辑器使用的基本类型,如果没有被说明,UITypeEditor为默认编辑器。

    Serializer:The serializer parameter specifies the IPropertySerializer type to use when serializing the properties values. This is equivalent to using a ....

例:

<%@ Property Name="NameSpace" Default="BLL" Type="String" Category="Context" Description="业务层" %>

<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="表名" %>

Assembly声明:

Assembly声明属性,Assembley声明类似.Net工程中的引用程序集。

Name

名称

程序集名称,不包括.dll后缀

组件的参数:

    Name:需要引用组件的名称,组建必须存在于Global Assembly Cache,与CodeSmith在同一路径下或与模版文件在同一路径下。

    Src:要包含文件的相对路径。

例:<%@ Assembly Name="SchemaExplorer" %>//加载使用访问数据库的组件SchemaExplorer

用作在模版中引用一个外部部组件,或者包含一个编译好的源文件。

<%@ Assembly Src="MySourceFile.cs" %>

CodeSmith自动加载一些不同的组件:System, System.Diagnostics, System.ComponentModel, Microsoft.VisualBasic, CodeSmith.Engine

Import声明:

Import声明属性,类似.Net工程中的使用命名空间,类似于using System

Name

名称

命名空间

例:<%@ Import Namespace="SchemaExplorer" %>//声明其使用的命名空间

Register声明:

这个属性通常被用作引入另一个模版文件并与当前的模版文件同时被编译。这是一种使用子模版的交互方法

 

Name

名称

将模板作为一个类的别名使用

 

 

Template

模板名称

模板文件的全路径

             

注册的参数:

    Name:代表被引入的模版的名称。它可以被用作创建一个模版的实例。

    Template:被引入模版文件的相对路径,它可以与当前的模版一起被动态的编译。

    MergeProperties:设置成True时,所有被引用的面板的属性将被动态的添加到当前模版中。

    ExcludePorperties:当使用MergeProperties时,你可能不需要某些属性被添加到当前模版中。将不需要的属性以逗号分隔放在这里,*号可以被用作通配符使用。

例:<%@ Register Name="MySubTemplate" Template="MySubTemplate.cst" MergeProperties="True" ExcludeProperties="SomeExcludedPropertyName,SomeProperties*" %>

 

XML属性声明(XmlProperty Directive)

 

    Name:名称。

    Schema:这个参数用来指定一个XSD文件,创建一个强类型对象模型。如果这个计划被指定,编译器会尝试分析这个XSD文件并为这个计划生成一个强类型对象模型,这样可以在模版中使用强类型和智能与XML协同工作。如果这个计划没有被设定,这个参数将为XmlDocument类型并且将使用XML DOM去导航到一个XML内容并生成代码。

    Category:在CodeSmith属性面板中的类别。

    Description:描述。

    Optional:这个参数是否是必须的,如果设置为True,则参数不是必须的,反之False则为必须的。在设置为False时,如果用户没有提供参数则CodeSmith不能继续运行。

 

例:<%@ XmlProperty Name="EntityMap" Schema="EntityMap.xsd" Optional="False" Category="Context" Description="EntityMap XML file to base the output on." %>

 

输出部分

这个部分的内容最终会到达最终生成的源代码文件,所以在编写这部分内容的时候,一定要对将要生成的内容的结构十分熟悉和了解。

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

1. 固定内容:指的是没有在<%%>中间包括的内容。必输出

2.     可变内容:在<%%><%=%>中间包括的内容。根据逻辑输出

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

例子:

<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Property Name="TestString" Type="System.String" Default="SomeValue" Optional="True" Category="Strings" Description="This is a sample string property." %>
<%for(int i=0;i<10;i++)
{
 Response.WriteLine("第"+i.ToString()+"次:"+TestString);
}
%>

0次:aaaaa
第1次:aaaaa
第2次:aaaaa
第3次:aaaaa
第4次:aaaaa
第5次:aaaaa
第6次:aaaaa
第7次:aaaaa
第8次:aaaaa
第9次:aaaaa

对象借用了Response的壳子,它的魂却是控制台应用程序中常用的输出输入对象Console。

<%for(int i=0;i<10;i++)%>
<%{%>
<%Response.Write(i);%><%Response.Write(TestString);%>
<%}%>

<%=变量名称%>或<%=常量名称%>(注意此处的<%=%>中没有分号

 

函数部分

这部分可以放一些在输出部分使用的函数,函数当中也可以使用在声明部分定义的参数。

函数部分必须包括在<script runat="template"><script>

public int Sum(int x,int y)

{

    return x+y;

}

在这个标签中可以包含一段代码,但是他不直接影响输出的模版。可以放置一些比较有帮助的方法在其中,然后在模版的各个地方可以调用它。在脚本标签中必须包含这个参数runat=template,否则他会被处理成普通文本。

 

其它部分

Include标签

和ASP.NET一样,可以在模版中包含一些文本文件,但同ASP.NET一样它也不是总能达到你的目标。

例:

<!--#include file="myfile.inc"-->

 

有时在多个模版中引用一个组件中的功能,调用其中的方法,这时我们引用组件。但有些情况下,适用Include标签可以得到更好的效果。

 

Comment标签

注释标签,在前边已经做过介绍。

例:

       CodeSmith Object

       CodeSimth中有许多对象可以在编写模板的时候使用,这里将介绍这些对象的一些公用方法和属性以及怎么使用它们。

posted @ 2012-11-23 21:47  snowhumen  阅读(1188)  评论(0编辑  收藏  举报