CodeSmith基礎(四)

 本文是翻譯的第四篇,內容爲在CodeSmith中使用的語法和標籤的參考。

CodeSmith模板語法參考
本文的目的是在編寫一個CodeSmith模板時遇到的各種類型的變量和對象提供參考。本文的目的不是要介紹CodeSmith,如果您想快速瞭解CodeSmith請查看我翻譯的CodeSmith基礎(一)和CodeSmith基礎(二)。

標籤
標籤一般出現在模板的頭部,被用做設置許多不同的屬性。
代碼模板的聲明(CodeTemplate Directive
這個是模板中唯一必須的聲明,包含一些模板特殊的屬性,包含模板使用的語言、生成的語言和一些對於模板的描述。
例:

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Generates a class." %>

 

參數的介紹:
    Language
:在開發編寫模板時使用的語言,例如C#VB.NETJscript等。
    TargetLanguage
:只是對模板代碼的一個分類,不會影響生成的代碼語言。是模板的一個屬性,說明模板要基於那種語言生成相應的代碼。例如你可以用CodeSmith從任何一種語言生成C#代碼。
    Description
:對於模板的一些說明信息,在CodeSmith Explorer中選中該模板時會顯示這裏的信息。
    Inherits
:所有CodeSmith模板默認繼承自CodeSmith.Engine.CodeTemplate,這個類提供模板使用的一些基本功能,像ASP.NET頁面的Page類,這些被繼承的類的屬性可以被修改,但是這些新的類也必須繼承CodeSmith.Engine.CodeTemplateCodeSmith也同樣可以找到這個類,當然你要引入一個組件包含這個類。
    Src
:在某些方面Src和繼承Inherits比較相似,它們都允許你從其他的類包含一些功能進模板。這兩個屬性的區別是,Src可以讓類與你的模板被動態編譯,而Inherits僅允許你提供一個已經編譯好的類或組件。
    Debug
:可以確定是否在模板中可以包含調試符號。如果將這個屬性設置爲True,則可以使用System.Diagnostics.Debugger.Break()方法來設置斷點。
    LinePragmas
:設置爲True,模板的錯誤將被指向到模板的源代碼。設置爲False,模板的錯誤將被指向到編譯的源代碼。

屬性的聲明(Property Directive
屬性被用做在模板運行時聲明一個使用的參數,例:
<%@ Property Name="ClassName" Type="String" Default="Class1" Category="Context" Description="The name of the class to generate" Optional="true" %>

屬性參數的介紹:

Name:模版使用的參數的名稱。
Type
:參數類型可以是任何.NET有效的數據類型,例如簡單的String類型或者是CodeSmithSchemaExplorer.DatabaseSchema類型。注意,類型必須是基類庫的類型,例如用String或者Int32代替stringint
Default
:設置默認值。
Category
:用來說明這個屬性在CodeSmith Explorer的屬性面板中顯示成什麼類型,例如下拉選擇、直接輸入等。
Description
:在屬性面板中對於這個屬性的描述。
Optional
:設置這個屬性是否是必須的,設置爲True表明這個參數值可有可無,設置爲False則這個參數必須有值。
Editor
:表明在屬性面板中輸入這個屬性的值時使用何種GUI(圖形界面編輯器)編輯器。
EditorBase
:編輯器使用的基本類型,如果沒有被說明,UITypeEditor爲默認編輯器。
Serializer
:這塊我的水平不太會犯疑:)The serializer parameter specifies the IPropertySerializer type to use when serializing the properties values.This is equivalent to using a [PropertySerializerAttribute].

XML屬性聲明(XmlProperty Directive
例:

<%@ XmlProperty Name="EntityMap" Schema="EntityMap.xsd" Optional="False" Category="Context" Description="EntityMap XML file to base the output on." %>

XML

屬性的參數:
Name
:名稱。
Schema
:這個參數用來指定一個X?xml:namespace>SD文件,創建一個強類型對象模型。如果這個計劃被指定,編譯器會嘗試分析這個XSD文件併爲這個計劃生成一個強類型對象模型,這樣可以在模版中使用強類型和智能與XML協同工作。如果這個計劃沒有被設定,這個參數將爲XmlDocument類型並且將使用XML DOM去導航到一個XML內容並生成代碼。
Category
:在CodeSmith屬性面板中的類別。
Description
:描述。
Optional
:這個參數是否是必須的,如果設置爲True,則參數不是必須的,反之False則爲必須的。在設置爲False時,如果用戶沒有提供參數則CodeSmith不能繼續運行。

註冊的聲明(Register Directive
這個屬性通常被用作引入另一個模版文件並與當前的模版文件同時被編譯。這是一種使用子模版的交互方法。
例:
<%@ Register Name="MySubTemplate" Template="MySubTemplate.cst" MergeProperties="True" ExcludeProperties="SomeExcludedPropertyName,SomeProperties*" %>

 

模版一旦被註冊,就可以建立一個模版的實例,然後象這樣設置它的屬性: 
 1<script runat="template">
 2publicvoid OutputSubTemplate()
 3{
 4   MySubTemplate mySubTemplate =new MySubTemplate();
 5
 6// set an individual properties value.
 7   mySubTemplate.SomeExcludedPropertyName ="SomeValue";
 8
 9// copy all properties with matching name and type to the sub template instance.
10this.CopyPropertiesTo(mySubTemplate);
11
12// render the template to the current templates Response object.
13   mySubTemplate.Render(this.Response);
14
15// render the template to a file.
16   mySubTemplate.RenderToFile("C:\SomeFile.txt");
17}
18</script>

 

註冊的參數:
Name
:代表被引入的模版的名稱。它可以被用作創建一個模版的實例。
Template
:被引入模版文件的相對路徑,它可以與當前的模版一起被動態的編譯。
MergeProperties
:設置成True時,所有被引用的面板的屬性將被動態的添加到當前模版中。
ExcludePorperties
:當使用MergeProperties時,你可能不需要某些屬性被添加到當前模版中。將不需要的屬性以逗號分隔放在這裏,*號可以被用作通配符使用。

組件的聲明(Assembly Directive
用作在模版中引用一個外部部組件,或者包含一個編譯好的源文件。
例: 
<%@ Assembly Name="SchemaExplorer" %>

 

或 
<%@ Assembly Src="MySourceFile.cs" %>

 

CodeSmith自動加載一些不同的組件:System, System.Diagnostics, System.ComponentModel, Microsoft.VisualBasic, CodeSmith.Engine

組件的參數:
Name
:需要引用組件的名稱,組建必須存在於Global Assembly Cache,與CodeSmith在同一路徑下或與模版文件在同一路徑下。
Src
:要包含文件的相對路徑。

引入的聲明(Import Directive
在模版中引入一個命名空間,這個與VB.NET中的ImportsC#中的using相同。
例: 
<%@ Import Namespace="SchemaExplorer" %>

 

引入的參數:
NameSpace
:被引入的命名空間的名字。記住同時必須要加載包含這個命名空間的相應組件,除非這個組件是被默認加載的。

http://www.cnblogs.com/Bear-Study-Hard/archive/2005/12/20/300948.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章