• CodeSmith介绍


    什么是CodeSmith?从字面上直译可以看作“代码工匠”。这倒是个很拟人化的名称,顾名思义,CodeSmith的目标就是根据模板生成规范可用的代码,为程序员减轻工作负担。
    程序员是软件开发团队中的最小单位,有什么任务都只能自己一肩扛起而无法再往下分配。但是程序员又是聪明的,他们总是能找到很多美妙的办法来减轻压力,代码生成器就是一个典型的例子。事实上,Visual Studio 2005本身就自带了代码生成的功能,比如您在代码编辑器中输入关键字“for”,然后直接按Tab键,代码生成器便会为您生成好一段模板式的代码:

            static void Main(string[] args)

            {                      

                for (int i=0;i<length;i++)

                {                  

                                   

                }                  

            }                      

    Visual Studio 2005还能自动生成其它更多形式的代码,但终究不如CodeSmith那样强大和丰富,毕竟术业有专攻嘛。CodeSmith是以模板作基础来为程序员生成高质量代码的,模板可大可小,CodeSmith一次能够生成的代码量也就可多可少,这主要靠具体问题具体分析。

    CodeSmith的模板是以“.cst”为后缀名的代码文件,其风格非常类似于ASP.NET。模板中除了大量固定的代码以外,还有遍布于各处的元数据(metadata)。固定代码就是会被CodeSmith原封不动地输出的代码,而元数据则可以被看作是模板中的变量。

    CodeSmith是一个基于模板的代码生成器。模板是所生成代码的式样。开发者或架构师可应用CodeSmith来生成任何文本语言的代码。其结果(生成的代码)可通过属性来自定义并包含在众多的标准属性类型之中。另外,用户还可建立自定义的属性类型。

       针对.NET Framework而言,性质可以是任何拥有设计器的.NET对象。例如,它可以是一个简单的分配标题的字符串性质。另一方面,可用TableSchema对象来访问数据库表中的一切内容。

      CodeSmith工具的一个强项是它的语法,其与ASP.NET的方法相当。实际上,你使用CodeSmith生成代码之前必须编写相应的模板,可以使用C#、VB.NET和JScript.NET进行模板的编写。事实上,CodeSmith可输入任何ASCII语言。

      CodeSmith 包括两个工具,一个是CodeSmithStudio.exe是用来设计和编译模板;另一个是CodeSmith.exe是用来运行模板生成代码的, CodeSmith.exe还可以与VS.NET集成,成为VS.NET的一个外部工具。

    以下是对CodeSmith实现原理的简略概述:
    1、支持执行代码块语法  ,与 Asp.net语法一模一样
    2、支持内联表达式语法  ,与 Asp.net语法一模一样
    3、 支持Code Behind功能(,与 Asp.net的()类似
    4、 支持 函数代码块功能,  与Asp.net的函数代码块功能 类似
    5、支持属性申明,用于配置模板的属性.  Asp.net语法不支持.

    查看更多精彩图片

    那么现在我们就通过一个简单的模板文件来了解CodeSmith的工作原理:
    如果您了解ASP.NET的语法,那么就很好理解CodeSmith模板文件了

       <%@ CodeTemplate ResponseEncoding="UTF-8"  Debug="True"  Src="Base.cst.cs" Inherits="BasePage" Language="C#" TargetLanguage="C#" Description="Demonstrates the most basic template." %>

    <%@ Property Name="Tables" Type="SchemaExplorer.TableSchemaCollection" Category="Source" Optional="True" %>

    <%@ Property Name="Views" Type="SchemaExplorer.ViewSchemaCollection" Category="Source" Optional="True"   %>

    <%@ Property Name="MustLog" Type="System.Boolean" Default="true"  Category="Source" %>

    <%@ Assembly Name="SchemaExplorer" %>

    <%@ Assembly Name="CodeSmith.CustomProperties" %>

    <%@ Assembly Name="System.Data" %>

    <%@ Assembly Name="System.Design" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.IO" %>

    <%@ Import Namespace="SchemaExplorer" %>

    <%@ Import Namespace="System.Design" %>

     Description:作为模板的描述性信息并可以在该模板的ToolTip中显示;
    ● 
    Inherits:尽管默认情况下所有模板都继承自CodeSmith.Engine.CodeTemplate,但仍然可以由您来指定模板继承自其它类(只要该类直接或间接地继承自CodeSmith.Engine.CodeTemplate);
    Src:该属性使您能够将其它类的功能添加进当前模板,您能够用这个属性来实现“代码隐藏”模型;
    ● 
    Debug:当该属性被设置为True时,您就可以使用System.Diagnostics.Debugger.Break方法来为您的模板设置断点;
    OutputType:该属性用于指定以“Normal”、“Trace”或“None”方式输出模板;
    ● 
    LinePragmas:当该属性被设置为True时,模板错误将指向源代码;设置为False时,模板错误将指向编译后的代码;
    ResponseEncoding:用于设置模板及输出的编码,该属性支持来自于System.Text.Encoding.GetEncoding方法的值,默认情况下为ASCII。

         Language 模板语言

         TargetLanguage 创建代码语言(生成的代码的语言类型)

    把生成的partial文件夹直接复制到逻辑层(BLL)中, BLL添加DAL引用(Subsonic生成DAL文件),这样就可以使用生成代码了。(逻辑层引用数据库层)

     

    注意:

    查看更多精彩图片

    查看更多精彩图片

     

     

     

     

     

     

    下载

    CodeSmith模板

  • 相关阅读:
    zhcon安装过程记录
    diff和patch配合使用(转载备用)
    Linux /etc/passwd 和 /etc/group 文件格式
    APT 常用功能
    Linux邮件服务器架构
    出现segment fault 错误的几种原因
    位运算
    Linux启动过程中几个重要配置文件的执行过程
    2016-2017 ACM-ICPC, South Pacific Regional Contest (SPPC 16)
    Codeforces Round #439 (Div. 2) 题解
  • 原文地址:https://www.cnblogs.com/Gemgin/p/3136369.html
Copyright © 2020-2023  润新知