CodeSmith代码生成工具介绍

序 员是软件开发团队中的最小单位,有什么任务都只能本身一肩扛起而没法再往下分配。可是程序员又是聪明的,他们老是能找到不少美妙的办法来减轻压力,代码生 成器就是一个典型的例子。事实上,Visual Studio  2005自己就自带了代码生成的功能,好比您在代码编辑器中输入关键字“for”,而后直接按Tab键,代码生成器便会为您生成好一段模板式的代码:html

        static void Main(string[] args)程序员

        {                       数据库

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

            {                   编辑器

                               

            }                   函数

        }                       工具

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

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

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

   针对.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实现原理的简略概述:
一、支持执行代码块语法  ,与 Asp.net语法如出一辙
二、支持内联表达式语法  ,与 Asp.net语法如出一辙
三、 支持Code Behind功能(,与 Asp.net的()相似
四、 支持 函数代码块功能,  与Asp.net的函数代码块功能 相似
五、支持属性申明,用于配置模板的属性.  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文件),这样就可使用生成代码了。(逻辑层引用数据库层)

 

注意:

查看更多精彩图片

查看更多精彩图片

 

 

 

 

 

 

下载

相关文章
相关标签/搜索