代码改变世界

用父模板生成多个不同子模板(同步生成)

2009-05-11 17:14  宝宝合凤凰  阅读(368)  评论(0)    收藏  举报

 

=================================================================================

<%@ CodeTemplate Language="C#" TargetLanguage="Text" ResponseEncoding="UTF-8"  Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Assembly Name="CodeSmith.CustomProperties" %>

<%@ Import Namespace="System.IO" %>

<%@ Property Name="NameSpace" Type="System.String" Default="" Optional="False" Category="" Description="父模板中的属性将决定子模板中的同名属性"  %>

<% CodeTemplate ModelObjectTemplate = GetCodeTemplate("NewTemplate2.cst"); %>
<% CodeTemplate ModelObjectTemplate2 = GetCodeTemplate("NewTemplate3.cst"); %>

<%--if(!Directory.Exists(ModelDirectory)) Directory.CreateDirectory(ModelDirectory);--%>
<% RenderFileUsingProperties(@"C:\dir\" + @"table1" + "Info.txt",true,ref ModelObjectTemplate); %>
<% RenderFileUsingProperties(@"C:\dir\" + @"table2" + "Info.txt",true,ref ModelObjectTemplate2); %>

<script runat="template">

 #region Get Template
public static CodeTemplate GetCodeTemplate(string TemplateName)
 {   
  CodeTemplate template;
  CodeTemplateCompiler compiler = new CodeTemplateCompiler(TemplateName);
  compiler.Compile();
    
  if (compiler.Errors.Count == 0)
  {
   template = compiler.CreateInstance();
  }
  else
  {
   System.Text.StringBuilder errorMessage = new System.Text.StringBuilder();    
   for (int i = 0; i < compiler.Errors.Count; i++)
   {
    errorMessage.Append(compiler.Errors[i].ToString()).Append("\n");
   }
   throw new ApplicationException(errorMessage.ToString());
  }
       
  return template;
 }
 #endregion
 
  public void RenderFileUsingProperties(string fullPath, bool overrite, ref CodeTemplate template)
 {
  if( overrite || (!File.Exists(fullPath)) )
  {
   CopyPropertiesTo(template);
   template.RenderToFile(fullPath, overrite);
  }
 }
</script>

这是父模板
生成完毕!

---------------------------------------------------------

 

<%--
Name:
Author:
Description:
--%>
<%@ CodeTemplate Language="C#" ResponseEncoding="UTF-8" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Property Name="SampleStringProperty" Type="System.String" Default="SomeValue" Optional="True" Category="Strings" Description="This is a sample string property." %>
<%@ Property Name="SampleBooleanProperty" Type="System.Boolean"  Default="True" Optional="False" Category="Booleans" Description="This is a sample boolean property." %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="System.Data" %>
<%@ Property Name="NameSpace" Type="System.String" Default="" Optional="False" Category="" Description=""%>

注意:NameSpace是父,子都有的属性

using System;
using System.Data;
using <%= NameSpace %>.Model;
using <%= NameSpace %>.IDAL;
using <%= NameSpace %>.DALFactory;

namespace <%= NameSpace %>.BLL

 

====================================================================

<%--
Name:
Author:
Description:
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Property Name="SampleStringProperty" Type="System.String" Default="SomeValue" Optional="True" Category="Strings" Description="This is a sample string property." %>
<%@ Property Name="SampleBooleanProperty" Type="System.Boolean" Default="True" Optional="False" Category="Booleans" Description="This is a sample boolean property." %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="System.Data" %>
01010101010101010
0101001001010101010101010101010
9292929299