CodeSmith使用基础教程 三 — 语法与对象

转载 2007年10月01日 10:55:00
五、CodeSmith的模版中的语法

代码标签
       <% %>
标签
       可以放置任意数量的代码在其中,但并不能直接输出到模版中。
 
<% foreach (ColumnSchema column in SourceTable.Columns) { %>
<%= column.Name %>
<% } %>

<%= %>标签

在模版中输出一个字符串。上例中的<%=column.Name%>

脚本标签

在这个标签中可以包含一段代码,但是他不直接影响输出的模版。可以放置一些比较有帮助的方法在其中,然后在模版的各个地方可以调用它。在脚本标签中必须包含这个参数runat=”template”,否则他会被处理成普通文本。

例:

 1 <script runat="template">
 2 private string GetColumnName(ColumnSchema cs)
 3 {
 4       return cs.Name;
 5 }
 6 </script>
 7 
 8 <% foreach (ColumnSchema cs in SourceTable.Columns) { %>
 9 <%= GetColumnName(cs) %>
10 <% } %>

 

 

使用标签可以大量减少代码,并使模版更加的易读和一管理。

 

Include标签

ASP.NET一样,可以在模版中包含一些文本文件,但同ASP.NET一样它也不是总能达到你的目标。

例:

<!-- #i nclude file="myfile.inc" -->

 

 

有时在多个模版中引用一个组件中的功能,调用其中的方法,这时我们引用组件。但有些情况下,适用Include标签可以得到更好的效果。

Comment标签

注释标签,在前边已经做过介绍。

例:

       CodeSmith Object
       CodeSimth中有许多对象可以在编写模板的时候使用,这里将介绍这些对象的一些公用方法和属性以及怎么使用它们。

 
六、CodeSmith对象。

代码模板对象(CodeTemplate Object
在模板中,“this”(或者“Me”在VB.NET中)在当前模板中代码代码模板对象。 

代码模板的方法(CodeTemplate Methods

1
public virtual void GetFileName()
可以重载这个方法设置模板输出到文件的名称。否则CodeSmith将基于模板名称和TargetLanguage设置它的文件名。

2public void CopyPropertiesTo(CodeTemplate target)
这个方法可以实现从一个模板中将其所有属性的值拷贝到另一个模板所有对应属性中,并按照相应的属性值类型进行匹配。

3public object GetProperty(string propertyName)
这个方法将返回一个给定名称的属性的值。

4public void SetProperty(string propertyName, object value)
此方法可以根据给定名称的属性设置其值。

5public string SavePropertiesToXml ()
这个方法将现有的属性值保存成一个XML的属性字符串。

6public void SavePropertiesToXmlFile (string fileName)
这个方法将当前属性值保存成一个XML的属性文件。

7public void RestorePropertiesFromXml(string propertySetXml, string baseDirectory)
从保存在XML文件中的属性字符串,将模板的属性值恢复。

8public void RestorePropertiesFromXmlFile(string fileName)
从保存在XML文件中的属性文件,将模板的属性值恢复。 

代码模板的属性(CodeTemplate Properties
Response:此属性可以访问当前的TextWriter对象,这个对象是用来输出模板用的。

CodeTemplateInfo:这个属性用来访问当前的CodeTemplateInfo对象,这个对象包含当前模板的一些信息。

Progress:这个属性用来报告当前模板的执行过程。

 

Response Object
这个对象提供直接写输出模板的方法。与ASP.NETresponse对象很相似。下面是一个利用ResponseWrite方法在模板上输出一段文字的例子。

<% Response.Write("This will appear in the template") %>

IndentLevel (Int32)
当使用Response对象时输出文本的缩进级别。

Indent() Method
将输出缩进一个级别。

Unindent() Method
将输出少缩进一个级别。

AddTextWriter(TextWriter writer) Method
Response对象增加一个TextWriter。这样可以使在同一时间用多个TextWriter输出模板。

 

CodeTemplateInfo Object
此对象包含一些当前模板的信息。下面是一些CodeTemplateInfo可用的属性。

DateCreated (DateTime)
返回一个date类型值,是模板创建的时间。

DateModified (DateTime)
返回模板最后一次被修改的时间。

Description (string)
返回模板声明时对模版的描述信息。

DirectoryName (string)
返回当前模板文件所在的路径。

FileName (string)
返回当前模版文件的文件名称。

FullPath (string)
返回当前模板的完整路径,路径名+文件名。

Language (string)
返回代码模版声明时使用的语言。

TargetLanguage (string)
返回代码模版声明时生成的目标语言。

 

Progress Object

这个属性用来报告当前模板的执行过程。下面是一些Progress可用的成员。

MaximumValue (Int32)
模版progress允许的最大值。

MinimumValue (Int32)
模版progress允许的最小值。

Step (Int32)
模版每执行一不progress的增长值。

Value (Int32)
Progress的当前值。

PerformStep() Method
按照指定好的progress的增加值执行一步。(原文:Perform a progress step incrementing the progress value by the amount specified in the Step property.

Increment(Int32 amount) Method
指定progress的增加值。(原文:Increment the progress value by the specified amount.

OnProgress (ProgressEventHandler) Event
这个事件用来报告模版的执行过程。(原文:This event can be used to be notified of template execution progress.

1this.Progress.OnProgress += new ProgressEventHandler(this.OnProgress);
2
3public void OnProgress(object sender, ProgressEventArgs e)
4{
5  Trace.WriteLine(e.Value);
6}
<%-- This is a comment --%>

CodeSmith 基础教程

〇、            前言最近两天自己写了个简单的ORM框架,非常的Easy,但是没有相应的代码生成工具,于是就很杯具了!于是乎,花费了一天的时间学习并写了一个CodeSmith可以使用的模板。...

CodeSmith 基础教程

〇、            前言最近两天自己写了个简单的ORM框架,非常的Easy,但是没有相应的代码生成工具,于是就很杯具了!于是乎,花费了一天的时间学习并写了一个CodeSmith可以使用的模板。...

CodeSmith基础教程

请大家耐心看完所有的基础文章,前两篇网上发表的比较多,是CodeSmith英文帮助文档的第一篇,我后面写的基础是将其他所有的英文帮助全部翻译出来了,全部为本人手写翻译,希望对大家有所帮助 一、第一个...

CodeSmith 基础教程(转载)

〇、            前言最近两天自己写了个简单的ORM框架,非常的Easy,但是没有相应的代码生成工具,于是就很杯具了!于是乎,花费了一天的时间学习并写了一个CodeSmith可以使用的模板。...

Android基础教程(二)之五大布局对象—FrameLayout,LinearLayout ,AbsoluteLayout,RelativeLayout,TableLayout

大家好,我们这一节讲一下Android对用五大布局对象,它们分别是FrameLayout(框架布局:不知道是不是这么翻译的),LinearLayout (线性布局),AbsoluteLayout(绝对...

黑马程序员 《ios零基础教程》 --基础语法、类和对象 2014-4-21总结

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 今天有看各位师兄的bolg,自己...

CodeSmith 使用教程(4): 基本语法-CodeTemplate 指令

前面的几篇介绍了使用CodeSmith模板自动生成代码和编写代码模板的基本知识。也说过CodeSmith最核心的部分是代码模板,从本篇开始介绍CodeSmith代码模板的基本语法,对于Asp.Net程...

CodeSmith 使用教程(4): 基本语法-CodeTemplate 指令

 前面的几篇介绍了使用CodeSmith模板自动生成代码和编写代码模板的基本知识。也说过CodeSmith最核心的部分是代码模板,从本篇开始介绍CodeSmith代码模板的基本语法,对于As...

CodeSmith 使用教程(6): 基本语法-声明和使用属性

CodeSmith的核心是模板,而使模板具有活力的就是属性,通过定义属性从而使代码模板能够根据配置生成所需的代码。在使用代码模板时首先也必须给模板定义的属性定义值才能使用CodeSmith通过模板产生...

CodeSmith 使用教程(6): 基本语法-声明和使用属性

 CodeSmith的核心是模板,而使模板具有活力的就是属性,通过定义属性从而使代码模板能够根据配置生成所需的代码。在使用代码模板时首先也必须给模板定义的属性定义值才能使用CodeSmith通过...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeSmith使用基础教程 三 — 语法与对象
举报原因:
原因补充:

(最多只允许输入30个字)