CodeSmith的模版中的语法

2024-01-11 12:58
文章标签 语法 模版 codesmith

本文主要是介绍CodeSmith的模版中的语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇将介绍 CodeSmith的模版中的语法。
标签
       
标签一般出现在模板的头部,被用做设置许多不同的属性。
代码模板的声明(CodeTemplate Directive
        这个是模板中唯一必须的声明,包含一些模板特殊的属性,包含模板使用的语言、生成的语言和一些对于模板的描述。
       
例:
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Generates a class." %>
参数的介绍:
    Language
:在开发编写模板时使用的语言,例如C#VB.NETJscript等。
    TargetLanguage
:只是对模板代码的一个分类,不会影响生成的代码语言。是模板的一个属性,说明模板要基于那种语言生成相应的代码。例如你可以用CodeSmith从任何一种语言生成C#代码。
    Description
:对于模板的一些说明信息,在CodeSmith Explorer中选中该模板时会显示这里的信息。
    Inherits
:所有CodeSmith模板默认继承自CodeSmith.Engine.CodeTemplate,这个类提供模板使用的一些基本功能,像ASP.NET页面的Page类,这些被继承的类的属性可以被修改,但是这些新的类也必须继承CodeSmith.Engine.CodeTemplateCodeSmith也同样可以找到这个类,当然你要引入一个组件包含这个类。
    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类型或者是CodeSmithSchemaExplorer.DatabaseSchema类型。注意,类型必须是基类库的类型,例如用String或者Int32代替stringint
    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中的ImportsC#中的using相同。
    例:
<%@ Import Namespace="SchemaExplorer" %>
引入的参数:
    NameSpace
:被引入的命名空间的名字。记住同时必须要加载包含这个命名空间的相应组件,除非这个组件是被默认加载的。
 

这篇关于CodeSmith的模版中的语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/594435

相关文章

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

ORACLE语法-包(package)、存储过程(procedure)、游标(cursor)以及java对Result结果集的处理

陈科肇 示例: 包规范 CREATE OR REPLACE PACKAGE PACK_WMS_YX IS-- Author : CKZ-- Created : 2015/8/28 9:52:29-- Purpose : 同步数据-- Public type declarations,游标 退休订单TYPE retCursor IS REF CURSOR;-- RETURN vi_co_co

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

react笔记 8-16 JSX语法 定义数据 数据绑定

1、jsx语法 和vue一样  只能有一个根标签 一行代码写法 return <div>hello world</div> 多行代码返回必须加括号 return (<div><div>hello world</div><div>aaaaaaa</div></div>) 2、定义数据 数据绑定 constructor(){super()this.state={na

python基础语法十一-赋值、浅拷贝、深拷贝

书接上回: python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 python基础语法四-数据可视化 python基础语法五-函数 python基础语法六-正则匹配 python基础语法七-openpyxl操作Excel python基础语法八-异常 python基础语法九-多进程和多线程 python基础语法十-文件和目录操作

python进阶篇-day07-高级语法与正则

day07-python其他高级语法 一. with(上下文管理) 介绍 概述 一个类只要实现了__ enter __ () 和 __ exit __ ()方法, 这个类就是一个上下文管理器类, 该类的对象 = 上下文管理器对象 目的 节约资源, 提高效率, 避免手动释放资源, 且出bug的时候, 也会自动尝试释放资源 特点 上下文管理器对象, 可以结合with语句使用

FHQ Treap模版(luogu P3369)

FHQ Treap模版(自用),带注释 #include<bits/stdc++.h>using namespace std;const int N=1e5+10;int n,root,idx;struct node{int l,r;int val,key,size;}tr[N];int getnew(int v){tr[++idx].val=v;//权值tr[idx].key=rand(