CodeSmith使用方法

摘要:
声明部分包括CodeTemplate,Property,Assembly,Import,Register,Map,XmlProperty。CodeTemplate声明为必选声明。TargetLanguage:通过模板生成的代码的语言,一般来说,无关紧要,但还是尽量实事求是的写吧,因为CodeSmith需要这个属性来给代码着色。Category:用来说明这个属性在CodeSmithExplorer的属性面板中显示成什么类型,例如下拉选择、直接输入等。Name名称程序集名称,不包括.dll后缀组件的参数:Name:需要引用组件的名称,组建必须存在于GlobalAssemblyCache,与CodeSmith在同一路径下或与模版文件在同一路径下。

CodeSmith(1):使用和语法简介

http://www.cnblogs.com/duanzt/archive/2005/12/31/308665.html

下载:

官方网站:http://www.codesmithtools.com/

5.0破解文件下载:http://kewlshare.com/dl/0538fcf454d3/CodeSmith.5.0.Professional.Incl.Patch.DTCG.rar.html

资料:

http://blog.sina.com.cn/s/articlelist_1229294631_3_1.html

http://www.cnblogs.com/Terrylee/category/44974.html

http://www.cnblogs.com/huangcong/archive/2010/06/14/1757957.html

http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html

CodeSmith生成代码的基础为数据库,生成代码依赖于你编写的模板。

模板分成三部分:声明,输出,函数。

声明部分包括

CodeTemplate,Property,Assembly,Import,Register,Map,XmlProperty。

CodeTemplate声明:

CodeTemplate声明的属性

Language

语言

编写输出和函数部分使用的语言

TargetLanguage

目标语言

生成代码的语言

Src

源文件

模板中使用的类文件名称

Inherits

继承的类

模板继承自的类名

Debug

调试

是否需要调试

Description

描述

简介

ResponseEncoding

输出编码格式

设置输出内容的编码格式

LinePragmas:设置为True,模板的错误将被指向到模板的源代码。设置为False,模板的错误将被指向到编译的源代码。

CodeTemplate声明为必选声明。

Language:一般可以使用C#,VB,JScript等语言,此处要慎重,尽量选择熟悉的语言。

TargetLanguage:通过模板生成的代码的语言,一般来说,无关紧要,但还是尽量实事求是的写吧,因为CodeSmith需要这个属性来给代码着色。

Src和Inherits:这两个Src写的是源文件名称路径,Inherits写的是继承的父类名称。这两个属性可以不设置。

Debug:可选True或False,用来决定是否调试,简单模板一般设置为False。

ResponseEncoding:如果要让你的模板生成的内容中包括中文,那么设置这个属性为UTF-8。

例:

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Src="https://tool.4xseo.com/article/93958.html" Inherits="" Debug="False" Description="产生实体类" ResponseEncoding="UTF-8" %>

Property声明:

属性被用做在模板运行时声明一个使用的参数

Name

名称

模版使用的参数的名称,类似变量名称

Type

类型

类似变量类型,System.String,String都行

Default

默认值

默认值

Optional

是否可选

Bool类型,True:可选,False:必选

Category

分组名称

Description

描述

在属性面板中对于这个属性的描述

Type:参数类型可以是任何.NET有效的数据类型,例如简单的String类型或者是CodeSmith的SchemaExplorer.DatabaseSchema类型。注意,类型必须是基类库的类型,例如用String或者Int32代替string和int。

Category:用来说明这个属性在CodeSmith Explorer的属性面板中显示成什么类型,例如下拉选择、直接输入等。

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 ....

例:

<%@ Property Name="NameSpace" Default="BLL" Type="String" Category="Context" Description="业务层" %>

<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context"Description="表名" %>

Assembly声明:

Assembly声明属性,Assembley声明类似.Net工程中的引用程序集。

Name

名称

程序集名称,不包括.dll后缀

组件的参数:

Name:需要引用组件的名称,组建必须存在于Global Assembly Cache,与CodeSmith在同一路径下或与模版文件在同一路径下。

Src:要包含文件的相对路径。

例:<%@ Assembly Name="SchemaExplorer" %>//加载使用访问数据库的组件SchemaExplorer

用作在模版中引用一个外部部组件,或者包含一个编译好的源文件。

<%@ Assembly Src="http://t.zoukankan.com/MySourceFile.cs" %>

CodeSmith自动加载一些不同的组件:System, System.Diagnostics, System.ComponentModel, Microsoft.VisualBasic, CodeSmith.Engine

Import声明:

Import声明属性,类似.Net工程中的使用命名空间,类似于using System

Name

名称

命名空间

例:<%@ Import Namespace="SchemaExplorer" %>//声明其使用的命名空间

Register声明:

这个属性通常被用作引入另一个模版文件并与当前的模版文件同时被编译。这是一种使用子模版的交互方法

Name

名称

将模板作为一个类的别名使用

Template

模板名称

模板文件的全路径

注册的参数:

Name:代表被引入的模版的名称。它可以被用作创建一个模版的实例。

Template:被引入模版文件的相对路径,它可以与当前的模版一起被动态的编译。

MergeProperties:设置成True时,所有被引用的面板的属性将被动态的添加到当前模版中。

ExcludePorperties:当使用MergeProperties时,你可能不需要某些属性被添加到当前模版中。将不需要的属性以逗号分隔放在这里,*号可以被用作通配符使用。

例:<%@ Register Name="MySubTemplate" Template="MySubTemplate.cst" MergeProperties="True" ExcludeProperties="SomeExcludedPropertyName,SomeProperties*" %>

XML属性声明(XmlProperty Directive)

Name:名称。

Schema:这个参数用来指定一个XSD文件,创建一个强类型对象模型。如果这个计划被指定,编译器会尝试分析这个XSD文件并为这个计划生成一个强类型对象模型,这样可以在模版中使用强类型和智能与XML协同工作。如果这个计划没有被设定,这个参数将为XmlDocument类型并且将使用XML DOM去导航到一个XML内容并生成代码。

Category:在CodeSmith属性面板中的类别。

Description:描述。

Optional:这个参数是否是必须的,如果设置为True,则参数不是必须的,反之False则为必须的。在设置为False时,如果用户没有提供参数则CodeSmith不能继续运行。

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

输出部分

这个部分的内容最终会到达最终生成的源代码文件,所以在编写这部分内容的时候,一定要对将要生成的内容的结构十分熟悉和了解。

输出部分可以划分为两部分:

1.固定内容:指的是没有在<%%>中间包括的内容。必输出

2. 可变内容:在<%%><%=%>中间包括的内容。根据逻辑输出

在<%%>中间可以填写的内容为:在模板声明部分的CodeTemplate声明中Language属性所指的语言编写的任何内容,可以定义变量,常量,可以使用各种控制结构,几乎是任何语句都可以,因为CodeSmith毕竟是架构在.Net体系结构中的。

例子:

<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="https://tool.4xseo.com/article/93958.html" Inherits="" Debug="False" Description="Template description here." %>
<%@ Property Name="TestString" Type="System.String" Default="SomeValue" Optional="True" Category="Strings" Description="This is a sample string property." %>
<%for(int i=0;i<10;i++)
{
Response.WriteLine("第"+i.ToString()+"次:"+TestString);
}
%>

0次:aaaaa
第1次:aaaaa
第2次:aaaaa
第3次:aaaaa
第4次:aaaaa
第5次:aaaaa
第6次:aaaaa
第7次:aaaaa
第8次:aaaaa
第9次:aaaaa

对象借用了Response的壳子,它的魂却是控制台应用程序中常用的输出输入对象Console。

<%for(int i=0;i<10;i++)%>
<%{%>
<%Response.Write(i);%><%Response.Write(TestString);%>
<%}%>

<%=变量名称%>或<%=常量名称%>(注意此处的<%=%>中没有分号

函数部分

这部分可以放一些在输出部分使用的函数,函数当中也可以使用在声明部分定义的参数。

函数部分必须包括在<script runat="template"><script>

public int Sum(int x,int y)

{

return x+y;

}

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

其它部分

Include标签

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

例:

<!--#include file="myfile.inc"-->

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

Comment标签

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

例:

CodeSmith Object

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

免责声明:文章转载自《CodeSmith使用方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Vue.js 源码分析(五) 基础篇 方法 methods属性详解octave中的一些基本操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在Delphi中高效执行JS代码

因为一些原因,需要进行encodeURIComponent和decodeURIComponent编码,在Delphi中找了一个,首先是发现不能正确编码+号,后面强制处理替换了,勉强可用。 后面发现多次使用后delphi自带的HttpEncode会报Out of Memory. 以上可能是我使用的不好,但没有找到解决办法。 后面想到直接采用运行JavaScr...

java利用SuffixFileFilter统计目录下特定后缀名文件的数目

/** * 文件处理类 * @author zhangcd * @date 2017年1月3日 */ public class FileUtil { /** * 得到所有后缀的数目 * * @param directory 目录 * @param suffixFilter 后缀 * @...

Android开发人员不得不收集的代码(不断更新中...)

尺寸相关 dp与px转换 sp与px转换 各种单位转换 在onCreate()即可获取View的宽高 ListView中提前测量View尺寸 手机相关 判断设备是否是手机 获取当前设备的IMIE,需与上面的isPhone一起使用 获取手机状态信息 是否有SD卡 获取MAC地址 获取手机厂商,如Xiaomi 获取手机型号...

Android中的设计思想一

Android设计思想 直接上示例 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ xml布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/r...

hadoop26----netty,多个handler

k客户端: package cn.itcast_03_netty.sendorder.client; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; im...

C# Post form-data 上传

1.首先先从NuGet下载包  2.方法 public string PostData(string UrlAdd, string inputData){ string str = ""; try { HttpClient client = ne...