• CodeSmith使用和语法简介


    下载:

    官方网站: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

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

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhaili1978/archive/2008/10/28/3167509.aspx

  • 相关阅读:
    编译pypcap
    python输出重复字符串的简单办法
    Python天天美味(1) 交换变量(转)
    Python天天美味(4) isinstance判断对象类型(转)
    Python天天美味(2) 字符遍历的艺术(转)
    Python天天美味(3) 字符转换(转)
    Python天天美味(5) ljust rjust center(转)
    Python天天美味(6) strip lstrip rstrip(转)
    Python天天美味(10) 除法小技巧(转)
    Python标准库12 数学与随机数 (math包,random包)(转)
  • 原文地址:https://www.cnblogs.com/luluping/p/1523977.html
Copyright © 2020-2023  润新知