使用CodeSmith批量生成文件

  如果你能看到这篇文章,说明你手中已经有CodeSmith,如果没有,那去http://download.csdn.net/source/1452382这里下载吧。

  今天用了小一天的时间,了解了一下CodeSmith,确实是很强大,废话就不说了,批量生成文件的方法主要是调用子模板来生成文件。

  先看一下子模板:

ExpandedBlockStart.gif 代码
<%--  
Name:
Author: 
Description: 
--%>
<% @ CodeTemplate Language = " C# "  TargetLanguage = " C# "  Description = " Template description here. "  ResponseEncoding = " UTF-8 "   %>
<% @ Property Name = " SourceTable "  Type = " SchemaExplorer.TableSchema "  Default = ""  Optional = " False "  Category = " Context "  Description = ""  OnChanged = ""  Editor = ""  EditorBase = ""  Serializer = ""   %>
<% @ Assembly Name = " SchemaExplorer "   %>
<% @ Import Namespace = " SchemaExplorer "   %>
///  
//  File: .cs 
//  Description: Enter summary here after generation. 
//  --------------------- 
//  Copyright ? Our Client 
//  --------------------- 
//  History 
//  <%= DateTime.Now.ToShortDateString() %> Original Version 
///  

using  System;
namespace  App.Entity
{
    
/// <summary>
    
/// <%=SourceTable.Columns[0].Description%>
    
/// </summary>
     public   class  Entity <%= SourceTable.Name %>  : BaseEntity
    {
        
<% foreach (ColumnSchema column  in  SourceTable.Columns) %>
        
<% { %>
        
/// <summary>
        
/// <%=column.Description%>
        
/// </sumary>
         private   <%= GetCSDataType(column) %>  m_ <%= column.Name %> ;
        
<% } %>
        
        
<% foreach (ColumnSchema column  in  SourceTable.Columns) %>
        
<% { %>
        
public   <%= GetCSDataType(column) %>   <%= column.Name %>
        {
            
get return  m_ <%= column.Name %> ;}
            
set { m_ <%= column.Name %>= value;}
        }
        
<% } %>
        
    }
}
< script runat = " template " >
//  My methods here.

public   string  GetCSDataType(ColumnSchema column)
{
       
switch  (column.DataType)
       {
              
case  DbType.AnsiString:  return   " string " ;
              
case  DbType.AnsiStringFixedLength:  return   " string " ;
              
case  DbType.Binary:  return   " byte[] " ;
              
case  DbType.Boolean:  return   " bool " ;
              
case  DbType.Byte:  return   " byte " ;
              
case  DbType.Currency:  return   " decimal " ;
              
case  DbType.Date:  return   " DateTime " ;
              
case  DbType.DateTime:  return   " DateTime " ;
              
case  DbType.Decimal:  return   " decimal " ;
              
case  DbType.Double:  return   " double " ;
              
case  DbType.Guid:  return   " Guid " ;
              
case  DbType.Int16:  return   " short " ;
              
case  DbType.Int32:  return   " int " ;
              
case  DbType.Int64:  return   " long " ;
              
case  DbType.Object:  return   " object " ;
              
case  DbType.SByte:  return   " sbyte " ;
              
case  DbType.Single:  return   " float " ;
              
case  DbType.String:  return   " string " ;
              
case  DbType.StringFixedLength:  return   " string " ;
              
case  DbType.Time:  return   " TimeSpan " ;
              
case  DbType.UInt16:  return   " ushort " ;
              
case  DbType.UInt32:  return   " uint " ;
              
case  DbType.UInt64:  return   " ulong " ;
              
case  DbType.VarNumeric:  return   " decimal " ;
              
default :
              {
                     
return   " __UNKNOWN__ "   +  column.NativeType;
              }
       }
}
</ script >

 

  在这里,首先定义欲生成的表信息"SourceTable",必须添加"SchemaExplorer"的引用。其它的就是如何按表结构输出到CS文件了(这里以实体类为例)。

  再看一下主模板:

  代码

 

   在主模板中,定义了"Tables"表示欲生成的表集合,"MakeDir"定义了生成文件保存的目录;

  <%@ Register Name="MyEntity" Template="C:\Documents and Settings\taurus\My Documents\CodeSmith\Templates\MyDemo\Entity.cst" MergeProperties="False" ExcludeProperties="" %>

  这个就是注册子模板,必须添加<%@ Assembly Name="CodeSmith.BaseTemplates" %>

<%@ Import Namespace="CodeSmith.BaseTemplates" %>,以增加对BaseTemplates的引用。

  然后,在"OutputSubTemplate"函数中调用子模板输出文件

  CodeTemplate temp = new MyEntity();

    temp.SetProperty("SourceTable",table);    

    temp.RenderToFile(MakeDir+"\\"+table+".cs",true); 

  这里,RenderToFile的第一个参数是输出文件名,第二个参数是是否覆盖原文件。

  这样,通过在主文件中调用多个子模板文件,完成针对实体类、数据处理类以及前端文件的批量生成。

 

  参考:http://www.cnblogs.com/lovko/archive/2009/06/19/1506840.html 

     http://bear-study-hard.cnblogs.com/archive/2005/12/19/300320.html 

转载于:https://www.cnblogs.com/land/archive/2010/03/11/codesmithmakefiles.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值