CodeSmith1-基础
CodeTemplate(模板声明标签)
创建好一个模板后第一步要指明这是一个C#语言的模板
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Generates a class including a special informational header" %>
参数
- Language:在开发编写模板时使用的语言,例如C#,VB.NET,Jscript等。
- TargetLanguage:只是对模板代码的一个分类,不会影响生成的代码语言。
- Description:对于模板的一些说明信息。
- Inherits:所有CodeSmith模板默认继承自CodeSmith.Engine.CodeTemplate,这个类提供模板使用的一些基本功能,像ASP.NET页面的Page类。
- Src:在某些方面Src和继承Inherits比较相似,它们都允许你从其他的类包含一些功能进模板。这两个属性的区别是,Src可以让类与你的模板被动态编译,而Inherits仅允许你提供一个已经编译好的类或组件。
- Debug:可以确定是否在模板中可以包含调试符号。如果将这个属性设置为True,则可以使用System.Diagnostics.Debugger.Break()方法来设置断点。
- LinePragmas:设置为True,模板的错误将被指向到模板的源代码。设置为False,模板的错误将被指向到编译的源代码。
注释标签
<%-- Comments --%>
代码标签
<% %>
<% foreach (ColumnSchema column in SourceTable.Columns) { %>
<%= column.Name %>
<% } %>
在模板中输出一个字符串
<%= %>
脚本标签
在这个标签中可以包含一段代码,但是他不直接影响输出的模版。可以放置一些比较有帮助的方法在其中,然后在模版的各个地方可以调用它。在脚本标签中必须包含这个参数runat=”template”,否则他会被处理成普通文本。
<script runat="template">
public string Hello(){
return "hello world";
}
</script>
<%= Hello() %>
include标签
可以在模版中包含一些文本文件,有时在多个模版中引用一个组件中的功能,调用其中的方法,这时我们引用组件。但有些情况下,适用Include标签可以得到更好的效果。
<!-- #include file="../Function.cst" -->
数据库相关组件、命名空间
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
Assembly(组件声明)
用作在模版中引用一个外部部组件,或者包含一个编译好的源文件。
例:
<%@ Assembly Name="SchemaExplorer" %>
或
<%@ Assembly Src="MySourceFile.cs" %>
参数
- Name:需要引用组件的名称,组建必须存在于Global Assembly Cache,与CodeSmith在同一路径下或与模版文件在同一路径下。
- Src:要包含文件的相对路径。
在加载模板时默认加载的组件Assemblies和命名空间Namespaces
组件:mscorlib, System, System.Xml, System.Data, System.Drawing, Microsoft.VisualBasic, System.Windows.Forms, CodeSmith.Engine
命名空间:System, System.Data, System.Diagnostics, System.ComponentModel, Microsoft.VisualBasic, CodeSmith.Engine
CodeSmith自动加载一些不同的组件:System, System.Diagnostics, System.ComponentModel, Microsoft.VisualBasic, CodeSmith.Engine
Import(引用声明)
在模版中引入一个命名空间,这个与C#中的using相同。
<%@ Import Namespace="SchemaExplorer" %>
参数:
- NameSpace:被引入的命名空间的名字。记住同时必须要加载包含这个命名空间的相应组件,除非这个组件是被默认加载的。
Register(注册声明)
这是一种使用子模版的方法,这个属性通常被用作引入另一个模版文件并与当前的模版文件同时被编译。
例:
<%@ Register Name="MySubTemplate" Template="MySubTemplate.cst" MergeProperties="True" ExcludeProperties="SomeExcludedPropertyName,SomeProperties*" %>
模版一旦被注册,就可以建立一个模版的实例,然后象这样设置它的属性:
<script runat="template">
public void OutputSubTemplate()
{
MySubTemplate mySubTemplate = new MySubTemplate();
// set an individual properties value.
mySubTemplate.SomeExcludedPropertyName = "SomeValue";
// copy all properties with matching name and type to the sub template instance.
this.CopyPropertiesTo(mySubTemplate);
// render the template to the current templates Response object.
mySubTemplate.Render(this.Response);
// render the template to a file.
mySubTemplate.RenderToFile("C:\SomeFile.txt");
}
</script>
参数:
- Name:代表被引入的模版的名称。它可以被用作创建一个模版的实例。
- Template:被引入模版文件的相对路径,它可以与当前的模版一起被动态的编译。
- MergeProperties:设置成True时,所有被引用的面板的属性将被动态的添加到当前模版中。
- ExcludePorperties:当使用MergeProperties时,你可能不需要某些属性被添加到当前模版中。将不需要的属性以逗号分隔放在这里,*号可以被用作通配符使用。
参考:
CodeSmith基础:https://www.cnblogs.com/Terrylee/archive/2005/12/28/306254.html
CodeSmith案例:https://www.cnblogs.com/juan/category/183353.html