CodeSmith模板引擎系列一

简介:

在前些日子写了一些关于CodeDom的代码生成技术(目录),这里先感谢大家的支持和关注。我打算写一些代码生成编译技术的系列,包括CodeDom、CodeSmith模板、T4模板、StringTemplate,以及Expression Tree的系列随笔。如果可能的话再加上Emit系列。在这些系列中希望大家多关注,特别多多指教和交流。好了废话少说,今天就开始写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还包括一个名为SchemaExplorer的程序集,利用它可以访问几乎所有的数据库概要(schema)细节。访问这种信息让你能够生成各种代码,例如存储过程、类型DataSet、业务对象、表示层代码或任何其它基于数据库概要信息的代码。(来自:http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/default.aspx

      我们今天先来看看CodeSmith的固定头信息:

<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Description" %>

上面声明了语言为c#(也可以使其他语言)输出为Text非调试状态的模板 
<%@ Assembly Name="System.Data" %>

上面Wie引入程序集System.Data相当于我们项目的添加引用 
<%@ Import Namespace="System.Data" %>

导入命名空间System.Data相当于我们c#的using

<%@ Property Name="NameSpace" Type="String"  Category="Context"  Description="Description" %>

上面为申明字符串的属性NameSpace。这个将会在CodeSmith的Properties框里显示输出参数。

     今天就写一个简单的,毫无意义的模板,根据CodeSmith的SchemaExplorer程序集输出数据库表信息:

 
  1. 代码   
  2. <%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" %>  
  3. <%@ Assembly Name="SchemaExplorer" %>  
  4. <%@ Import Namespace="SchemaExplorer" %>  
  5. <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema"  Category="Context" %>  
  6. <%--  -----------------------------------------------------------------  
  7.  -- Date Created:   
  8.  -- Created By:   Generated by Wolf  
  9.  -------------------------------------------------------------------%>  
  10. <html>  
  11. <head>  
  12.     <title>CodeSmith Template</title>      
  13. </head>  
  14. <body>  
  15.     <form id="form1" runat="server">  
  16.     <div>  
  17.  <table style="background-color: #FFFFCC; display: table"    cellpadding="0" cellspacing="0">  
  18.             <tr>  
  19.                 <th>  
  20.                     ColumnName</th>  
  21.                 <th>  
  22.                     DbType</th>  
  23.                 <th>  
  24.                     DataType</th>  
  25.                 <th>  
  26.                     Size</th>  
  27.                 <th>  
  28.                     IsPrimaryKey</th>  
  29.                 <th>  
  30.                     IsForeignKey</th>  
  31.                 <th>  
  32.                     Unique</th>  
  33.             </tr>  
  34.               
  35.             <% foreach(ColumnSchema col in SourceTable.Columns ) {%>  
  36.             <tr>  
  37.                 <td>  
  38.                     <%= col.Name %></td>  
  39.                 <td>  
  40.                     <%= col.NativeType %></td>  
  41.                 <td>  
  42.                     <%= col.DataType %></td>  
  43.                 <td>  
  44.                    <%= col.Size %></td>  
  45.                 <td>  
  46.                     <%= col.IsPrimaryKeyMember %></td>  
  47.                 <td>  
  48.                     <%= col.IsForeignKeyMember %></td>  
  49.                   
  50.                 <td>  
  51.                     <%= col.IsUnique %></td>  
  52.             </tr>  
  53.             <% } %>  
  54.         </table>  
  55.       
  56.     </div>  
  57.     </form>  
  58. </body>  
  59. </html>  

 我们将输出导出为Html文件结果为:

 

image

?
今天就写到这里了,这个东西在我们的实际开发中毫无意义,只是拿来作为CodeSmith模板的HelloWorld示例,
?
请别拍砖。







 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/834667,如需转载请自行联系原作者

相关文章
|
6月前
|
测试技术
33 # 基本模板引擎
33 # 基本模板引擎
27 0
|
16天前
|
前端开发 JavaScript Java
thmeleaf模板引擎使用总结
thmeleaf模板引擎使用总结
|
5月前
|
前端开发 JavaScript Java
前端最常用的模板引擎-Handlebars
前端最常用的模板引擎-Handlebars
54 0
|
Java 应用服务中间件
详解模板引擎二
详解模板引擎二
75 0
详解模板引擎二
symfony框架Twig模板语言的使用
symfony框架Twig模板语言的使用
116 0
symfony框架Twig模板语言的使用
|
Java 程序员 Apache
模板引擎——FreeMarker初体验
FreeMarker 是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于 HTML格式的文本用来自动生成源代码)的通用工具。
|
开发框架 自然语言处理 安全
第21天:Web开发 Jinja2模板引擎
第21天:Web开发 Jinja2模板引擎
180 0
第21天:Web开发 Jinja2模板引擎
|
编解码 JavaScript 前端开发
|
XML 数据格式 机器学习/深度学习