CodeSmith代码生成工具介绍

五迷三道 提交于 2020-03-07 21:41:25

序 员是软件开发团队中的最小单位,有什么任务都只能自己一肩扛起而无法再往下分配。但是程序员又是聪明的,他们总是能找到很多美妙的办法来减轻压力,代码生 成器就是一个典型的例子。事实上,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-8Debug="TrueSrc="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文件),这样就可以使用生成代码了。(逻辑层引用数据库层)

 

注意:

查看更多精彩图片

查看更多精彩图片

 

 

 

 

 

 

下载



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!