本文是翻譯的第四篇,內容爲在CodeSmith中使用的語法和標籤的參考。
CodeSmith模板語法參考
本文的目的是在編寫一個CodeSmith模板時遇到的各種類型的變量和對象提供參考。本文的目的不是要介紹CodeSmith,如果您想快速瞭解CodeSmith請查看我翻譯的CodeSmith基礎(一)和CodeSmith基礎(二)。
標籤
標籤一般出現在模板的頭部,被用做設置許多不同的屬性。
代碼模板的聲明(CodeTemplate Directive)
這個是模板中唯一必須的聲明,包含一些模板特殊的屬性,包含模板使用的語言、生成的語言和一些對於模板的描述。
例:
參數的介紹:
Language:在開發編寫模板時使用的語言,例如C#,VB.NET,Jscript等。
TargetLanguage:只是對模板代碼的一個分類,不會影響生成的代碼語言。是模板的一個屬性,說明模板要基於那種語言生成相應的代碼。例如你可以用CodeSmith從任何一種語言生成C#代碼。
Description:對於模板的一些說明信息,在CodeSmith Explorer中選中該模板時會顯示這裏的信息。
Inherits:所有CodeSmith模板默認繼承自CodeSmith.Engine.CodeTemplate,這個類提供模板使用的一些基本功能,像ASP.NET頁面的Page類,這些被繼承的類的屬性可以被修改,但是這些新的類也必須繼承CodeSmith.Engine.CodeTemplate。CodeSmith也同樣可以找到這個類,當然你要引入一個組件包含這個類。
Src:在某些方面Src和繼承Inherits比較相似,它們都允許你從其他的類包含一些功能進模板。這兩個屬性的區別是,Src可以讓類與你的模板被動態編譯,而Inherits僅允許你提供一個已經編譯好的類或組件。
Debug:可以確定是否在模板中可以包含調試符號。如果將這個屬性設置爲True,則可以使用System.Diagnostics.Debugger.Break()方法來設置斷點。
LinePragmas:設置爲True,模板的錯誤將被指向到模板的源代碼。設置爲False,模板的錯誤將被指向到編譯的源代碼。
屬性的聲明(Property Directive)
屬性被用做在模板運行時聲明一個使用的參數,例:
屬性參數的介紹:
Name:模版使用的參數的名稱。
Type:參數類型可以是任何.NET有效的數據類型,例如簡單的String類型或者是CodeSmith的SchemaExplorer.DatabaseSchema類型。注意,類型必須是基類庫的類型,例如用String或者Int32代替string和int。
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)
例:
XML
屬性的參數:Name:名稱。
Schema:這個參數用來指定一個X?xml:namespace>
Category:在CodeSmith屬性面板中的類別。
Description:描述。
Optional:這個參數是否是必須的,如果設置爲True,則參數不是必須的,反之False則爲必須的。在設置爲False時,如果用戶沒有提供參數則CodeSmith不能繼續運行。
註冊的聲明(Register Directive)
這個屬性通常被用作引入另一個模版文件並與當前的模版文件同時被編譯。這是一種使用子模版的交互方法。
例:
模版一旦被註冊,就可以建立一個模版的實例,然後象這樣設置它的屬性:
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)
用作在模版中引用一個外部部組件,或者包含一個編譯好的源文件。
例:
或
CodeSmith自動加載一些不同的組件:System, System.Diagnostics, System.ComponentModel, Microsoft.VisualBasic, CodeSmith.Engine
組件的參數:
Name:需要引用組件的名稱,組建必須存在於Global Assembly Cache,與CodeSmith在同一路徑下或與模版文件在同一路徑下。
Src:要包含文件的相對路徑。
引入的聲明(Import Directive)
在模版中引入一個命名空間,這個與VB.NET中的Imports和C#中的using相同。
例:
引入的參數:
NameSpace:被引入的命名空間的名字。記住同時必須要加載包含這個命名空間的相應組件,除非這個組件是被默認加載的。
http://www.cnblogs.com/Bear-Study-Hard/archive/2005/12/20/300948.html