程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> CodeSmith使用基礎教程 二 — 語法、標簽

CodeSmith使用基礎教程 二 — 語法、標簽

編輯:.NET實例教程



三、約定
 
      這裡寫的東東都是從CodeSmith自帶的幫助文檔中FAQ裡學到的東東
        1.如何在模板中添加注釋
        CodeSmith:
        <%-- Comments --%>
        VB.Net:
        <%-- ''Comments --%>
        C#:
        <%-- // Comments --%>
        <%-- /* Comments */ --%>

        2.創建一個可以下拉選擇的屬性
        首先定義一個枚舉類型的變量,然後將屬性的類型設置為枚舉型
        CS_Identity_Example.cst文件源代碼
 
 1 <%@ Property Name="CollectionType" Type="CollectionTypeEnum" Category="Collection" Description="Type of collection" %>
 2 
 3 <script runat="tempate">
 4 public enum CollectionTypeEnum
 5 {
 6     Vector,
 7     HashTable,
 8     SortedList
 9 }
10 </script>


        3.解決ASP.Net中標簽<%重復問題
        先將ASP.Net中使用的這個重復標簽寫成<%%,避免在生成代碼時由於是標簽重復引起的編譯錯誤或生成錯誤。

        4.如何聲明一個常量
       


<script runat="template">
private const string MY_CONST = "example"; 
</script>


        5.如何對模板進行調試
        如果要調試一個模板,首先要在代碼模板裡進行聲明,然後在你想要進行調試的地方用Debugger.Break()語句設置斷點即可。


<%@ CodeTemplate Language="C#" TargetLanguage="T-SQL" Description="Debugging your template" Debug="true" %>

<% Debugger.Break(); %>


        6.如何將屬性設置成選擇一個文件夾的路徑


[Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))]

public string OutputDirectory
{
      get {return _outputDirectory;}
      set {_outputDirectory= value;}
}


        7.怎樣調用子模板


 1

<% 
 2foreach (TableSchema table in SourceDatabase.Tables) 
 3
 4   OutputSubTemplate(table); 
 5
 6%>
 7<script runat="template"> 
 8private CodeTemplate _mySubTemplate;
 9
10[Browsable(false)]
11public CodeTemplate MySubTemplate 
12



13   get 
14   
15      if (_mySubTemplate == null) 
16      
17         CodeTemplateCompiler compiler = new CodeTemplateCompiler(this.CodeTemplateInfo.DirectoryName + "MySubTemplate.cst"); 
18         compiler.Compile(); 
19         if (compiler.Errors.Count == 0) 
20         
21            _mySubTemplate = compiler.CreateInstance(); 
22         } 
23         else 
24         
25            for (int i = 0; i < compiler.Errors.Count; i++) 
26
            {
27               Response.WriteLine(compiler.Errors[ i].ToString()); 
28            } 
29         } 
30      } 
31      return _mySubTemplate; 
32   } 
33}
34
35public void OutputSubTemplate(TableSchema table) 
36
37   MySubTemplate.SetProperty("SourceTable", table); 
38   MySubTemplate.SetProperty("IncludeDrop", false); 
39   MySubTemplate.SetProperty("InsertPrefix", "Insert"); 
40   MySubTemplate.Render(Response); 
41
42</script>

        FAQ中給出的例子為生成一個數據庫中所有表的更新Update存儲過程
        SubTemplatesExample.cst文件源代碼


 1

<%@ CodeTemplate Language="C#" TargetLanguage="T-SQL"
 2    Description="Generates a update stored procedure." %>
 3
 4<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema"
 5    Category="Context"
 6    Description="Database" %>
 7
 8<%@ Assembly Name="SchemaExplorer" %>
 9
10<%@ Import Namespace="SchemaExplorer" %>
11
12<% 
13foreach (TableSchema table in Sour
ceDatabase.Tables) 
14
15   OutputSubTemplate(table); 
16
17%> 
18
19<script runat="template"> 
20private CodeTemplate _mySubTemplate; 
21 
22
23  
24
25[Browsable(false)]
26public CodeTemplate MySubTemplate 
27
28   get 
29   
30      if (_mySubTemplate == null) 
31      
32         CodeTemplateCompiler compiler = new CodeTemplateCompiler(this.CodeTemplateInfo.DirectoryName + "MySubTemplate.cst"); 
33         compiler.Compile(); 
34
    
35         if (compiler.Errors.Count == 0) 
36         
37            _mySubTemplate = compiler.CreateInstance(); 
38         } 
39         else 
40         
41            for (int i = 0; i < compiler.Errors.Count; i++) 
42            {
43               Response.WriteLine(compiler.Errors[ i].ToString()); 
44            } 
45         } 
46      } 
47      
48      return _mySubTemplate; 
49   } 
50
51
52public void OutputSubTemplate(TableSchema table) 
53



54   MySubTemplate.SetProperty("SourceTable", table); 
55   MySubTemplate.SetProperty("IncludeDrop", false); 
56   MySubTemplate.SetProperty("InsertPrefix", "Insert"); 
57   
58   MySubTemplate.Render(Response); 
59
60</script>

        MySubTemplate.cst文件源代碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved