CodeSmith的模版中的语法

CodeSmith 使用教程(1): 概述 前面正在介绍hibernate的开发教程,提到hibernate 在.Net 平台上相应的ORM工具为NHibernate ,使用NHibernate 就不能不提到CodeSmith。 CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 阅读详情
本篇将介绍CodeSmith的模版中的语法。
标签
       
标签一般出现在模板的头部,被用做设置许多不同的属性。
代码模板的声明(CodeTemplate Directive)
        这个是模板中唯一必须的声明,包含一些模板特殊的属性,包含模板使用的语言、生成的语言和一些对于模板的描述。
       
例:
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Generates a class." %>
参数的介绍:
    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)
        属性被用做在模板运行时声明一个使用的参数,例:
<%@ Property Name="ClassName" Type="String" Default="Class1" Category="Context" Description="The name of the class to generate" Optional="true" %>

属性参数的介绍:

    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)
例:
代码标签
       <% %>
标签
       可以放置任意数量的代码在其中,但并不能直接输出到模版中。

<% 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一样它也不是总能达到你的目标。

例:

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

 

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

Comment标签

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

例:

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

XML属性的参数:
    Name
:名称。
    Schema
:这个参数用来指定一个XSD文件,创建一个强类型对象模型。如果这个计划被指定,编译器会尝试分析这个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">
  2 public void 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.
10    this.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中的Imports和C#中的using相同。
    例:
<%@ Import Namespace="SchemaExplorer" %>
引入的参数:
    NameSpace
:被引入的命名空间的名字。记住同时必须要加载包含这个命名空间的相应组件,除非这个组件是被默认加载的。
 
CodeSmith三层架构模版 可以自动生成代码的模版!跟CodeSmith配套使用。三层架构模版 立即下载

相关推荐

RuoYi项目适配达梦数据库(二)

RuoYi项目,代码生成模块的达梦数据库适配。

邢慧鹏的博客 1万+

CodeSmith 基本语法(二)

CodeSmith 基本语法(二)   CodeSmith的C#语法与Asp.net MVC2的模板语法很像。 一、声明   编写模板代码的第一步是先进行一段声明: <%@ CodeTemplate Language="C#" TargetLangu...

ajwqb06628的专栏 193

删除win10电脑U盘使用记录

手工删除:和查看的方法类似,分三步,缺一不可,顺序也不能反! 第一步 设置环境变量,变量名为“devmgr_show_nonpresent_devices”,值为“1”。 第二步 打开设备管理器,勾上“查看”菜单中的“显示隐藏设备”。如果之前已经打开设备管理器,则要关了,重新打开。 第三步 清除“磁盘驱动器”、“存储卷”、“通用串行总线控制器”3个栏目下所有的灰色的图标,注意是所有!右键点击灰色图标,然后选择“卸载”。 成功 :结果USBSTOR 没有了 ...

qq_40544338的博客 2万+

Codesmith使用技巧

CodeSmith 是一种语法类似于asp.net的基于模板的代码生成器,程序可以自定义模板,从而减少重复编码的劳动量,提高效率。  下面我们就来学习一下CodeSmith的使用吧。 首先我们来看一看一个简单的模板文件: Description="Generates a class including a special informational header" %>

yizhiduxiu11的专栏 3498

Trae+Playwright MCP自动化测试全流程指南:从环境搭建到智能体运行

本文提供了一份详细的Trae与Playwright MCP集成指南,涵盖从Node.js、Python环境搭建到智能体创建的全流程。通过结合MCP协议,AI智能体能够理解任务并驱动Playwright执行复杂的浏览器自动化操作,实现从网页数据抓取到端到端测试的智能工作流。

banana的博客 531

从零实现Unitree Go2的SLAM建图与导航:手把手集成slam_toolbox和nav2(附Rviz2可视化配置)

本文详细指导如何在Unitree Go2四足机器人上集成slam_toolbox和nav2,实现SLAM建图与导航功能。从ROS2环境配置、雷达数据处理到slam_toolbox参数优化,再到nav2路径规划与Rviz2可视化调试,提供完整解决方案。特别适合机器人开发者快速掌握ROS2导航栈在Unitree Go2上的应用实践。

weixin_33737134的博客 1231

CodeSmith使用基础教程 二 — 语法、标签

三、约定       这里写的东东都是从CodeSmith自带的帮助文档中FAQ里学到的东东        1.如何在模板中添加注释        CodeSmith:                VB.NET:                C#:                        2.创建一个可以下拉选择的属性        首先定义一个枚举类型的变量,然后将属性的类型设

liyejun的专栏 765

FSL软件安装

FSL软件安装

huang_tianyuan的博客 2630

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

前面的几篇介绍了使用CodeSmith模板自动生成代码和编写代码模板的基本知识。也说过CodeSmith最核心的部分是代码模板,从本篇开始介绍CodeSmith代码模板的基本语法,对于Asp.Net程序员来说,可以说是碰到老朋友了:-) ,CodeSmith 的代码模板和Asp.Net Page 几乎如出一辙。 本篇介绍CodeTemplate指令,这个是模板中唯一必须的声明,包含一些模板特殊的属...

mapdigit 215

EDKII实战:手把手调试PciHostBridge.c,看UEFI如何分配你的PCIe设备资源(IO/Memory空间)

本文深入解析EDKII中PciHostBridge.c模块的工作原理,详细指导如何调试PCIe设备资源分配(IO/Memory空间)。通过实战案例展示UEFI环境下Root Bridge初始化、地址空间转换及协议安装等核心流程,提供常见问题排查方法与性能优化建议,帮助开发者解决PCIe设备兼容性问题。

weixin_29201933的博客 208

【Pix4d精品教程】Pix4d空三后处理:点云分类与过滤、DSM精编生成DEM、生成等高线案例详解

本文详细介绍了利用Pix4D软件进行无人机摄影测量后处理的关键步骤,主要包括点云分类与分配、DEM精编生成和等高线绘制三个核心环节。首先通过点云分类区分地面、植被等7种地物类型,然后通过点云分配将地面点云归并到Ground类别,剔除植被等干扰要素。随后重新运行DSM生成步骤获取精确DEM,最后在附加输出中设置参数生成标准等高线。文中配有详细的操作截图和注意事项,如处理前需备份原始DSM/DOM数据,并解释了DEM与DSM的本质区别。该教程为无人机摄影测量内业处理提供了完整的解决方案。

智慧空间实验室 1万+

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

五、CodeSmith的模版中的语法。代码标签       标签       可以放置任意数量的代码在其中,但并不能直接输出到模版中。 本文永久地址: http://www.livebaby.cn/blog/u/meil/archives/2007/981.html foreach (ColumnSchema column in SourceTable.Columns) { %> colu

liyejun的专栏 788

3dmax文件格式转换——.max 转换为 .flt(解决转换后.flt没有纹理贴图的问题)

本文主要介绍如何在3dmax中将.max格式文件转换为.flt格式文件,并解决转换后的文件没有纹理贴图的问题。 在3dmax中,将.max文件转换为.flt格式,只需导出选择.flt格式即可,但是导出的文件在osgEarth中加载后,缺少纹理和贴图。 下面是解决方案: 1、选中加载的模型,然后点击 渲染-> 渲染到纹理 2、将 渲染到纹理 子窗口往下拉,点击 添加 按钮,添加 ...

cchangcs 6167

CodeSmith基础(五)

本篇将介绍CodeSmith的模版中的语法。代码标签 <% %>标签 可以放置任意数量的代码在其中,但并不能直接输出到模版中。 <%foreach(ColumnSchemacolumninSourceTable.Columns){%><%=column.Name%><%}%> <%...

weixin_30404405的博客 75

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

CodeSmith入门教程之编写你的第一个模版

编写你的第一个模版CodeSmith和其他的代码生成工具相比较,最有价值的是:你可以通过编写你需要生成的代码的代码生成模版,你可以规定它代码如何生成,甚至指定在代码里面tabs和空格的数量。你可以完全控制你的代码输出,其他的工具几乎不可能完成这样的功能。你用来生成模版的工具已经有一堆不同的功能,如果你正在使用个人版的CodeSmith,你可以使用CodeSmith Studio,它有丰富...

aao84421的博客 128

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

CodeSmith基础教程

请大家耐心看完所有的基础文章,前两篇网上发表的比较多,是CodeSmith英文帮助文档的第一篇,我后面写的基础是将其他所有的英文帮助全部翻译出来了,全部为本人手写翻译,希望对大家有所帮助 一、第一个模板         创建好一个模板后第一步要指明这是一个C#语言的模板。       Description="Generates a class including a spe

sjsm2007的专栏 2166

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

codesmith php模板,CodeSmith 基本语法-CodeTemplate 指令

基本语法-CodeTemplate 指令前面的几篇介绍了使用 CodeSmith 模板自动生成代码和编写代码模板的基本知识。也说过 CodeSmith最核心的部分是代码模板,从本篇开始介绍 CodeSmith 代码模板的基本语法,对于 Asp.Net 程序员来说,可以说是碰到老朋友了:-) ,CodeSmith 的代码模板和 Asp.Net Page 几乎如出一辙。本篇介绍 CodeTemplat...

weixin_42410317的博客 174

CodeSmith技术原理初探

CodeSmith技术原理初探.初次听说CodeSmith是在一篇叫做的文章,起初CodeSmith给我的印象不是吸引人.也是在去年的某一段相对比较空闲的时候,抽空尝试了一下CodeSmith,才发现CodeSmith确实是一个好东西.使用过CodeSmith之后,才发现它的实现原理其实不是很复杂,它从Asp.Net的语法中借鉴了不少,应该说CodeSmith实现了Asp.net一部分功能(从

SmartJavaer的专栏 1330

CodeSmith使用基础教程 (3) — 语法与对象

五、CodeSmith的模版中的语法。代码标签       标签       可以放置任意数量的代码在其中,但并不能直接输出到模版中。   foreach (ColumnSchema column in SourceTable.Columns) { %> column.Name %> } %>标签在模版中输出一个字符串。上例中的脚本标签在这个标签中可以包含一段代码,但是他不

温水中的青蛙 566
上一篇: NHibernate快速指南
下一篇: CodeSmith技术原理初探
SmartJavaer
博客等级 码龄21年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值