CodeSmith是一個基于模闆的代碼生成器,它可以生成任何基于ASCII的程式設計語言代碼。生成的代碼可以使用屬性進行定制。屬性可以是任何具有設計器的.NET對象(大多數.NET内置類型已經有設計器),也可以是一個允許你從結果中有條件地添加或移除代碼的簡單的boolean 屬性,或是一個對象,例如能夠通路資料庫表資訊的TableSchema對象(包括在SchemaExplorer中)。CodeSmith完全可擴充,它允許使用者建立定制屬性類型。CodeSmith中包括多個定制屬性類型的例子,例如,定制一個允許選擇XML檔案(使用XmlSerializer可将其反序列化到對象中)的屬性類型。CodeSmith還允許使用者在模闆中引用和調用指定的外部程式集并且允許從外部程式集的類生成模闆。 我們今天先來看看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程式集輸出資料庫表資訊:
代碼
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" %>
<%-- -----------------------------------------------------------------
-- Date Created:
-- Created By: Generated by Wolf
-------------------------------------------------------------------%>
<html>
<head>
<title>CodeSmith Template</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="background-color: #FFFFCC; display: table" cellpadding="0" cellspacing="0">
<tr>
<th>
ColumnName</th>
DbType</th>
DataType</th>
Size</th>
IsPrimaryKey</th>
IsForeignKey</th>
Unique</th>
</tr>
<% foreach(ColumnSchema col in SourceTable.Columns ) {%>
<td>
<%= col.Name %></td>
<%= col.NativeType %></td>
<%= col.DataType %></td>
<%= col.Size %></td>
<%= col.IsPrimaryKeyMember %></td>
<%= col.IsForeignKeyMember %></td>
<%= col.IsUnique %></td>
<% } %>
</table>
</div>
</form>
</body>
</html>
我們将輸出導出為Html檔案結果為:
<a href="http://images.cnblogs.com/cnblogs_com/whitewolf/WindowsLiveWriter/CodeSmith_12E1D/image_2.png" target="_blank"></a>
<a href="http://blog.51cto.com/whitewolfblog/834667#">?</a> <code>今天就寫到這裡了,這個東西在我們的實際開發中毫無意義,隻是拿來作為CodeSmith模闆的HelloWorld示例,</code> <code>請别拍磚。</code> 本文轉自 破狼 51CTO部落格,原文連結:http://blog.51cto.com/whitewolfblog/834667,如需轉載請自行聯系原作者