作者:
James Avery
翻译:
lucentoff
出处:http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/default.aspx
声明:版权属原作者所有,转载请注明出处!
CodeSmith
CodeSmith是一个基于模板的代码生成工具,它使用类似于ASP.NET的语法来生成代码或文本。CodeSmith不像其它许多代码生成工具,它不要求你掌握特殊的应用程序设计或体系结构。利用CodeSmith可以生成简单的强类型集合,也可以生成完整的应用程序。
在创建应用程序时,无论是编写数据访问代码还是创建定制集合,你经常会发现自己在重复某些工作。这时候CodeSmith就特别有用,因为你可以编写模板来自动完成重复性任务,不但提高了生产力,而且自动完成了烦琐的任务。
CodeSmith带有许多模板,包括所有.NET集合类型的模板以及生成存储过程的模板,但它真正强大的功能在于创建定制模板。下面我就快速介绍一下创建定制模板。
创建定制模板
CodeSmith
模板是简单的文本文件,可以用任何文本编辑器创建,只需保存成以
.cst
为扩展名的文件即可。我将要创建的样例模板接受一个字符串并且创建以该字符串为名的类。首先是添加模板头,它声明了模板语言、目标语言以及模板的简要描述:
<%@ CodeTemplate Language="C#"
?? TargetLanguage="C#"
?? Description="Car Template" %>
接下来是声明模板每次运行时要指定的属性。我要使用一个字符串类型的属性,其声明如下:
<%@ Property Name="ClassName" Type="String" Category="Context"
????Description="Class Name" %>
当模板运行时,ClassName属性将出现在CodeSmith属性窗口中。下一步是创建实际的模板体,非常类似于用ASP.NET编写代码,如图3所示。
![](/images/blog_csdn_net/lucentoff/20209/o_fig03.jpg)
图3 定制模板与代码输出
可以看到,模板将接受字符串输入并产生一个以它为类名的单件类。模板体中使用的开始和结束定界符标记(<%和%>)与ASP.NET相同。在这个模板中,我只是简单地插入了属性值,但你可以在定界符标记内使用任何类型的.NET代码。一旦模板完成,可以通过双击把它加载到CodeSmith中或者从CodeSmith应用程序打开它,如图4所示。
![](/images/blog_csdn_net/lucentoff/20209/o_fig04.jpg)
图4 打开模板文件
可以看到,左边的属性是我在模板中声明的。如果输入“SingletonClass”作为类名,然后点击“Generate(生成)”按钮,就会生成如图3底部所示的类。
CodeSmith使用起来比较容易,正确运用会获得很好的效果。代码生成应用程序最常用的功能之一是生成数据访问层代码。CodeSmith包括一个专门的程序集叫作SchemaExplorer,它可用于生成数据表、存储过程或几乎任何其它SQL Server?对象模板。
CodeSmith由Eric J. Smith编写,下载网址:http://www.ericjsmith.net/codesmith。
CodeSmith概览
CodeSmith是一个基于模板的代码生成器免费软件,它可以生成任何基于ASCII的编程语言代码。生成的代码可以使用属性进行定制。属性可以是任何具有设计器的.NET对象(大多数.NET内置类型已经有设计器),也可以是一个允许你从结果中有条件地添加或移除代码的简单的boolean 属性,或是一个对象,例如能够访问数据库表信息的TableSchema对象(包括在SchemaExplorer中)。CodeSmith完全可扩展,它允许用户创建定制属性类型。CodeSmith中包括多个定制属性类型的例子,例如,定制一个允许选择XML文件(使用XmlSerializer可将其反序列化到对象中)的属性类型。CodeSmith还允许用户在模板中引用和调用指定的外部程序集并且允许从外部程序集的类生成模板。
CodeSmith的语法与ASP.NET几乎相同。因此如果你熟悉ASP.NET ,那么应该会很快理解模板语法。你可以在模板中使用C#、VB.NET或JScript.NET语言,并且模板可以输出任何基于ASCII的语言。
利用CodeSmith Explorer可以查看指定文件夹中所有的模板,并且可以将模板拖放到任何支持拖放文本的目标。你也可以在Windows资源管理器中双击执行模板文件。CodeSmith Explorer窗口还可以嵌入到Visual Studio .NET 2003 中作为一个工具窗口,让你可以方便地访问自己的模板。
![](/images/blog_csdn_net/lucentoff/20209/o_codesmithexplorer.jpg)
![](/images/blog_csdn_net/lucentoff/20209/o_codesmith.jpg)
CodeSmith有几种成批生成代码的方式。CodeSmith包括有一个用于Visual Studio .NET 2003的定制工具(Custom Tool),它包括基于多个属性集的代码生成模板。这个定制工具允许CodeSmith模拟范型,可以通过添加额外的属性集为一个模板创建多个专门的模板实例。当定制工具再次运行时,对模板的改变将反映到任何模板的实例中。CodeSmith中包括多种优化的集合模板(例如ArrayList、DictionaryList、Hashtable、Idictionary、Ilist、SortedList和Stack),利用这些模板可以创建避免装箱和拆箱的强类型集合,它们的性能要比.NET Framework 中的集合类型高1500%。CodeSmith还包括一个基于控制台的版本,它与定制工具相同,只不过是从命令行运行并且可以包括在任何编译和连接过程中。
![](/images/blog_csdn_net/lucentoff/20209/o_codesmith_visualstudio.jpg)
CodeSmith包括一个名为SchemaExplorer的程序集,利用它可以访问几乎所有的数据库概要(schema)细节。访问这种信息让你能够生成各种代码,例如存储过程、类型DataSet、业务对象、表示层代码或任何其它基于数据库概要信息的代码。
CodeSmith作为一个免费软件发布,其目的在于建立一个强大的用户和模板社群。我希望最终能使程序员少做一些重复性的烦人工作! 作为交换,我希望收到反馈建议、错误报告、教程、文档以及一些有用的模板以使我们的生活更加轻松!