codesmith4.0我自定义的模版
问题1。“bulid”的时候没报错,但是“run”的时候报错:
validation errors:
Namespace is required,Description is required,还有其他的is requered(Namespace和Description都是我定义的Property Name)
问题2。如果我只bulid,不run.然后我右键我的自定义模板,接着execute,弹出属性对话框,我把自定义的属性都填好后,generate却没有在指定文件夹里生成的.cs文件。以下是源代码:
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Src="" Inherits="" Debug="True" Description=" This template is create entity" ResponseEncoding="UTF-8" %>
<%@ Assembly Name="System.Design" %>
<%@ Assembly Name="System.Data" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="CodeSmith.CustomProperties" %> 
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<%@ Property Name="DeveloperName" Type="System.String" Category="Context" Default="wang" ResponseEncoding="UTF-8" %>
<%@ Property Name="SourceDataBase" Type="SchemaExplorer.DatabaseSchema" Category="Context" %>
<%@ Property Name="SourceDataTable" Type="System.String" Optional="False" Category="Context" %>
<%@ Property Name="NameSpace" Type="System.String" Category="Context" %>
<%@ Property Name="Description" Type="System.String" Category="" Description="About the entity" %> <% if(!Directory.Exists(OutputDirectory)) Directory.CreateDirectory(OutputDirectory); %>// File: <%= SourceDataTable %>.cs
// <%=DateTime.Now.ToShortDateString() %> : <%=DeveloperName %> Original Version
// 
// ===================================================================using System;
using System.Collections.Generic;
using System.Text;namespace <%= NameSpace %>
{
     /// <summary>
    /// <%= Description %>
    ///</summary>
    public class <%= SourceDataTable %>
    {
     #region Fields
<%
        ColumnSchemaCollection columns=rule.GetColumnCollection(SourceDataBase,SourceDataTable);
        for(int i=0;i<columns.Count;i++)
        {
         Response.Write("//"+columns[i].Description+"\r\n");
         Response.Write(" private "+rule.GetType(columns[i])+" f_"+columns[i].Name+";\r\n");
        }
       %>
#endregion
<% Debugger.Break();%>
   #region Properties
       <%
        for(int i=0;i<columns.Count;i++)
        {
       %> 
///<summary>
        ///<%= columns[i].Description %>
        ///</summary>
        public <%= rule.GetType(columns[i]) %> <%= columns[i].Name %>
        {
            get { return f_<%= columns[i].Name %>; }
            set { f_<%= columns[i].Name %>=value; }
        }
      <%   
       }
      %>  
        #endregion
}
}<script runat="template">
public class CodeTemplateRule
    {
public ColumnSchemaCollection GetColumnCollection(DatabaseSchema dataBase,string dataTable)
     {
         TableSchemaCollection tables = new TableSchemaCollection(dataBase.Tables);
         ColumnSchemaCollection columns=null;
         for(int i=0;i<tables.Count;i++)
         {
             if(tables[i].Name.ToUpper()==dataTable.ToUpper())
             {
                 TableSchema ts=tables[i];
                 columns=new ColumnSchemaCollection(ts.Columns);
             }
         }
        return columns;
    }
/*函数作用:输入数据库名和表名,得到列集合信息。用内部函数ColumnSchemaCollection可以得到某张表的所有列的集合。*/

/*
public string GetDataTable(string DataTable)
    {
        int i=DataTable.IndexOf("_");
        return DataTable.Substring(i+1,DataTable.Length-(i+1));
    }
函数作用:对输入的表名格式化,得到去掉前缀的表名,如PE_User,返回User。
*/

public string GetType(ColumnSchema column)
    {
        if (column.Name.EndsWith("TypeCode")) 
return column.Name;
        
        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 "int";
            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;
            }
        }
    }
/*函数作用:得到表字段的类型。*/

public string GetDefaultValue(ColumnSchema column)
    {
        if (column.Name.EndsWith("TypeCode"))
return column.Name;
        
        switch (column.DataType)
        {
            case DbType.AnsiString: return "\"\"";
            case DbType.AnsiStringFixedLength: return "\"\"";
            case DbType.Binary: return "null";
            case DbType.Boolean: return "false";
            case DbType.Byte: return "0";
            case DbType.Currency: return "0";
            case DbType.Date: return "DateTime.Parse(\"1900-1-1\")";
            case DbType.DateTime: return "DateTime.Parse(\"1900-1-1\")";
            case DbType.Decimal: return "0";
            case DbType.Double: return "0";
            case DbType.Guid: return "Guid.NewGuid().ToString()";
            case DbType.Int16: return "0";
            case DbType.Int32: return "0";
            case DbType.Int64: return "0";
            case DbType.Object: return "\"\"";
            case DbType.SByte: return "0";
            case DbType.Single: return "0";
            case DbType.String: return "\"\"";
            case DbType.StringFixedLength: return "";
            case DbType.Time: return "DateTime.Parse(\"1900-1-1\")";
            case DbType.UInt16: return "0";
            case DbType.UInt32: return "0";
            case DbType.UInt64: return "0";
            case DbType.VarNumeric: return "0";
            default:
            {
                return "__UNKNOWN__" + column.NativeType;
            }
        }
    }
/*函数作用:得到表字段的默认值。*/
}
CodeTemplateRule rule=new CodeTemplateRule(); 

#region Output
    private string _outputDirectory = String.Empty;
    
    [Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))] 
    [CodeTemplateProperty(CodeTemplatePropertyOption.Optional)]
    [Category("General")]
    [Description("The directory to output the results to.")]
    [DefaultValue("")]
    public string OutputDirectory 
    { 
        get
        {
            if (_outputDirectory.Length == 0)
            {
                return @"G:\EntityOutput";
            }
            else
            {
                return _outputDirectory;
            }
        }
        set
        {
            if (value.EndsWith("\\")) value = value.Substring(0, value.Length - 1);
            _outputDirectory = value;
        } 
    }
    #endregion</script>
请朋友们帮忙看看,谢谢。