`
lyunabc
  • 浏览: 551496 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

CodeSmith 使用教程(2): 编写第一个代码模板

 
阅读更多

CodeSmith 使用教程(1): 概述我们通过使用CodeSmith从数据库自动生成NHiberate代码,可以了解到使用CodeSmith自动生成代码的基本步骤:

  1. 选择使用合适的模板,CodeSmith随开发包自带了大量常用的模板,如果找不到合适的模板,CodeSmith支持自定义模板。
  2. 为模板选择合适的参数设置。
  3. 自动生成代码(可以为任意类型的代码,C#,Java, .XML 文本等)

20130103001

其核心为代码模板文件,随CodeSmith自带了不少常用的模板,可以通过模板浏览器来查询,此外网上也有很多第三方开发的模板,在使用前可以先查查是否已有现成的模板,或是可以通过修改现有的模板来完成自动生成代码的需要。

在开发应用时,很多人都喜欢通过复制以前的项目中的代码,然后通过修改以满足新项目,这些重用的代码通常具有很多共性(可以想想C++的模板类,C#的Generic等),CodeSmith就是用来为这些具有相似性的代码创建模板,然后通过设置属性(代码直接的不同点),就可以自动创建所需代码。

本例通过一个简单的例子来介绍创建一个自定义代码模板的方法。CodeSmith提供了Visual Studio的集成开发环境的支持,本例也是通过创建模板自动生成简化每个的C#项目都需要的AssemblyInfo.cs,在开发C# 应用时,一般是通过手工修改AssemblyInfo.cs的中属性(或者是Copy & Paste :-)).

首先我们使用Visual Studio创建一个C# HelloWorld下面(Console或是WinForm项目都可以),可以打开项目中的AssemblyInfo.cs

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("HelloWorld")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("HelloWorld")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("72797715-64b9-4bab-a49f-f55e8a0a18d7")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

为了使用CodeSmith,我们在HelloWorld中添加CodeSmith的项目文件并创建一个模板文件AssemblyInfo.cst
20130103002创建好的项目文件如下:
20130103003

编写CodeSmith的代码模板和编写Asp.Net 的Page非常类似,CodeSmith支持以C#,VB.Net和JavaScript做为脚本语言来编写模板,本例使用C#做为脚本语言(源代码/语言),计划生成的也是C#语言(目标代码/语言),打开AssemblyInfo.cst,修改代码为

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Create an AssemblyInfo.cs file." %>

每个CodeSmith的代码模板都是以CodeTemplate开始,定义代码模板使用的源语言,目标语言和简单的描述。

然后将这个模板添加到CodeSmith项目中,可以右键单击codesmith.csp ,选择Add output

这时CodeSmith的项目将创建好了,但单击”Generate code” 不会生成任何代码,因为我们的代码模板AssemblyInfo.cst 没做任何事。

创建代码模板可以从生成的结果开始,可以直接先把要生成的代码复制到代码模板AssemblyInfo.cst中,比如:

using System.Reflection;
using System.Runtime.CompilerServices;
//
// Created: 1/1/2013
// Author: James Shen
//
[assembly: AssemblyTitle("User storage utility")]
[assembly: AssemblyDescription("Helps manage data in Isolated Storage files.")]
[assembly: AssemblyConfiguration("Retail")]
[assembly: AssemblyCompany("Guidebee Pty Ltd, Inc.")]
[assembly: AssemblyProduct("StorageScan")]
[assembly: AssemblyCopyright("Copyright (c) Guidebee Pty Ltd.")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0")]
[assembly: AssemblyDelaySign(true)]

可以把要生成的代码模板的内容分成三部分:

  • 固定内容
  • 可以通过代码动态生成的部分(如上面的日期)
  • 需要用户提供属性配置的部分

此时如果使用Codesmith 的Generate Codes, 将自动生成AssemblyInfo.cs (缺省为模板名),不过AssemblyInfo.cs位置不是我们所需的Properties/AssemblyInfo.cs, 这可以通过重载代码模板的GetFileName方法来实现:

<%@ CodeTemplate Language="C#" TargetLanguage="C#"
  Description="Create an AssemblyInfo.cs file." %>
...
<script runat="template">
public override string GetFileName() {
    return "Properties/AssemblyInfo.cs";
}
</script>

这样在使用CodeSmith项目的Generate Codes,就自动覆盖原来的Properties/AssemblyInfo.cs文件。 内容就是模板中的代码部分。
但每次生成的代码都是固定的,作为模板来说没有什么灵活性,下面我们可以通过检查模板的内容,觉定那些内容是可变的。比如AssemblyInfo.cs的日期和Assembly的各个属性对于不同的项目来说是可变的。
这些可变的内容其中一部分可以通过代码自动生成(如日期),有一部分需要用户来配置,比如AssemblyTitle,AssemblyDescription等。
对于日期部分可以通过C#代码实现如下:

// Created: <%= DateTime.Now.ToLongDateString() %>

可以看出来CodeSmith的模板文件如AssemblyInfo.cst 和Asp.Net的Page文件中功能是非常类似,可以通过<%= 和%>直接嵌入C#代码(或VB.Net,JavaScripts)。

对于属性来说,可以通过先定义属性:

<%@ Property Name="Author" Type="System.String" Description="Lead author of the project." %>
<%@ Property Name="Title" Type="System.String" Description="Title of the project." %>
<%@ Property Name="Description" Type="System.String" Description="Description of the project." %>
<%@ Property Name="Configuration" Type="System.String" Default="Debug" Description="Project configuration." %>
<%@ Property Name="Company" Type="System.String" Default="Guidebee Pty Ltd." %>
<%@ Property Name="Product" Type="System.String" Description="Product Name." %>
<%@ Property Name="Version" Type="System.String" Default="1.0.*" Description=".NET assembly version." %>
<%@ Property Name="FileVersion" Type="System.String" Default="1.0" Description="Win32 file version." %>

属性定义通过Property 定义,Name定义属性名,Type为属性的数据类型,Default定义属性的缺省值, Description可以定义属性的作用及说明。

然后就可以在C#代码中使用这些属性,完整的代码模板如下:

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Create an AssemblyInfo.cs file." %>
<%@ Property Name="Author" Type="System.String" Description="Lead author of the project." %>
<%@ Property Name="Title" Type="System.String" Description="Title of the project." %>
<%@ Property Name="Description" Type="System.String" Description="Description of the project." %>
<%@ Property Name="Configuration" Type="System.String" Default="Debug" Description="Project configuration." %>
<%@ Property Name="Company" Type="System.String" Default="Guidebee Pty Ltd." %>
<%@ Property Name="Product" Type="System.String" Description="Product Name." %>
<%@ Property Name="Version" Type="System.String" Default="1.0.*" Description=".NET assembly version." %>
<%@ Property Name="FileVersion" Type="System.String" Default="1.0" Description="Win32 file version." %>
using System.Reflection;
using System.Runtime.CompilerServices;
//
// Created: <%= DateTime.Now.ToLongDateString() %>
// Author:  <%= Author %>
//
[assembly: AssemblyTitle("<%= Title %>")]
[assembly: AssemblyDescription("<%= Description %>")]
[assembly: AssemblyConfiguration("<%= Configuration %>")]
[assembly: AssemblyCompany("<%= Company %>")]
[assembly: AssemblyProduct("<%= Product %>")]
[assembly: AssemblyCopyright("Copyright (c) <%= DateTime.Now.Year.ToString() %> <%= Company %>")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("<%= Version %>")]
[assembly: AssemblyFileVersion("<%= FileVersion %>")]
[assembly: AssemblyDelaySign(true)]

此时如果需要“Generate output” 首先要配置代码模板的属性,这通过”Manage output” 来完成,

20130103004

次数如果打开codesmith.csp 文件可以看到为AssemblyInfo.cst 配置的属性内容:

<?xml version="1.0" encoding="utf-8"?>
<codeSmith xmlns="http://www.codesmithtools.com/schema/csp.xsd">
  <propertySets>
    <propertySet name="AssemblyInfo" template="AssemblyInfo.cst">
      <property name="Configuration">Debug</property>
      <property name="Company">Guidebee Pty Ltd.</property>
      <property name="Version">1.0.*</property>
      <property name="FileVersion">1.0</property>
      <property name="Author">James Shen</property>
      <property name="Title">Code smith Demo</property>
      <property name="Description">My First Template code</property>
      <property name="Product">SandCastle</property>
    </propertySet>
  </propertySets>
</codeSmith>

生成代码如下:

using System.Reflection;
using System.Runtime.CompilerServices;
//
// Created: Thursday, 3 January 2013
// Author:  James Shen
//
[assembly: AssemblyTitle("Code smith Demo")]
[assembly: AssemblyDescription("My First Template code")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyCompany("Guidebee Pty Ltd.")]
[assembly: AssemblyProduct("SandCastle")]
[assembly: AssemblyCopyright("Copyright (c) 2013 Guidebee Pty Ltd.")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0")]
[assembly: AssemblyDelaySign(true)]

本例下载


分享到:
评论

相关推荐

    CodeSmith使用教程 - v1.01

    ### 第 2 章:编写第一个代码模板 此章将引导读者逐步创建第一个代码模板。首先,你需要了解 CodeSmith 的模板编辑器,学习如何创建一个新的模板文件并设置模板的基本结构。接着,将学习如何使用简单的模板语言来...

    CodeSmith使用基础教程

    了解如何编写和管理模板是学习CodeSmith的第一步。 接下来,进入“CodeSmith使用基础教程 二 — 语法、标签”。这部分将详细解释CodeSmith的模板语法,包括模板注释、字符串处理、变量引用以及内置函数等。模板标签...

    CodeSmith自动模板

    2. 创建DAL模板:为每个Model类生成Repository接口和实现类,编写CRUD操作。 3. 创建BLL模板:基于Models和DAL,创建业务服务类,实现业务逻辑。 在实际应用中,我们还可以通过扩展CodeSmith的模板引擎,实现更复杂...

    CodeSmith 6.0 + 序列号

    在标题中提到的"CodeSmith 6.0 + 序列号",指的是该软件的第六个主要版本,并且提供了一个序列号,允许用户激活并使用这个版本。序列号CS60T-2XZF7-YJ9HP-QJDBK-J9SYL-5B72U-HALMC是激活CodeSmith 6.0的关键,确保...

    CodeSmith教程 中文版

    这个中文版的教程将引导你全面了解并掌握CodeSmith的使用技巧。 CodeSmith的核心功能在于自定义模板生成代码。通过使用内置的模板语言——CSTL(CodeSmith Template Language),你可以创建几乎任何类型的代码,...

    codeSmith自动生成三层中的代码

    2. 编写模板:使用CodeSmith的模板语言,根据数据源结构生成代码片段。 3. 参数化模板:通过参数传递变量,使模板更具灵活性。 4. 部署和执行:在CodeSmith中运行模板,生成最终的代码文件。 在"codeSmith自动生成...

    CodeSmith 三个引用文件

    总的来说,CodeSmith 是一个强大的开发辅助工具,通过自定义模板和引用文件,可以帮助开发者高效地生成符合项目需求的代码,减少手动编写重复代码的时间,提升开发效率。在实际应用中,`App_Data` 和 `Bin` 目录中的...

    CodeSmith开发资料

    1. **模板语言与目标语言指明:** 在创建CodeSmith模板时,第一步需要通过指令“@CodeTemplateLanguage”和“TargetLanguage”来指明模板语言和目标语言。例如,创建一个C#模板时,应当指定“C#”作为模板和目标语言...

    CodeSmith.zip

    使用CodeSmith,开发者可以创建各种类型的代码模板,包括但不限于数据库访问层、业务逻辑层、实体类、Web表单、WCF服务、甚至是复杂的业务规则。这些模板可以基于数据库模式、XML文件、JSON数据或其他任何数据源进行...

    codesmith超级好的学习教程word版本代码生成器net必备学习.pdf

    此外,为了确保生成的文件也支持中文,需要在模板的第一行添加`ResponseEncoding="UTF-8"`属性。同时,如果希望保留Tab键的缩进功能,需要取消【Tools-&gt;Options...-&gt;Studio-&gt;Editor-&gt;Convert tab to】的勾选。 ...

    CodeSmith安装程序

    CodeSmith是一款强大的代码生成工具,尤其在数据库建模和自定义代码模板方面有着显著的优势。它可以帮助开发者快速生成常见的CRUD操作代码,提高开发效率,减少重复劳动。下面将详细介绍CodeSmith及其安装过程。 1....

    codesmith乱码问题解决

    在弹出的对话框中,找到并勾选“Enable unicode support”选项,这是解决乱码问题的第一步,因为它确保了CodeSmith在处理文本时能正确识别并支持Unicode编码。 #### 步骤二:检查项目编码设置 接下来,需要检查并...

    CodeSmith.v4.1.2.Pro.(代码生成工具专业版)

    1. **模板引擎**:CodeSmith的模板引擎是其核心组成部分,允许用户使用模板语言(如C#或VB.NET)编写自定义模板,这些模板可以转换成实际的代码。模板语言支持条件判断、循环结构以及对数据源的遍历,使得复杂的代码...

    解决CodeSmith不能读取MySql数据库字段说明的问题

    CodeSmith允许用户使用C#语法来编写模板,以便根据数据库元数据生成代码。如果你的模板没有正确地处理字段描述,那么即使连接和驱动程序都没有问题,也会导致字段说明无法显示。确保模板中的代码能够访问并打印出每...

    CodeSmithProfessional

    总的来说,CodeSmith Professional是一个强大的开发工具,它通过模板驱动的代码生成,帮助开发者快速实现代码复用,提高开发速度,减少错误,并让开发团队能更专注于业务逻辑和创新。无论是在大型企业还是小型项目中...

    3924840常薣 要夺枯

    编写第一个模板是学习CodeSmith的关键步骤之一。这个过程通常包括以下几个阶段: 1. **识别需求**:确定需要生成的代码类型及所需的功能。 2. **创建模板**:根据识别的需求创建新的模板。 3. **静态内容**:首先...

    CodeSmith8.rar

    CodeSmith是一款强大的代码生成工具,尤其对于数据库驱动的软件开发来说,它能极大地提高开发效率。这个资源包"CodeSmith8.rar"包含了CodeSmith 8.01的官方安装程序,以及注册机和注册指南,使得用户能够免费激活并...

    FreeTextBox控件及CodeSmith安装程序

    CodeSmith是一款强大的代码生成工具,它通过使用模板语言来快速生成符合特定模式的代码,大大提高了开发效率。开发者可以创建自定义模板,用于生成数据库访问层、业务逻辑层、数据模型等各类代码,减少了手动编写...

    CodeSmithProfessional-40

    CodeSmith Professional是一款强大的.NET代码生成工具,它极大地提升了软件开发的效率,特别是在处理大量重复性编码工作时。这款工具以其高效、灵活和可定制化的特点,深受开发人员的喜爱。其第40版本针对.NET框架...

    CodeSmithProfessional5.0

    CodeSmith Professional 5.0 是一个强大的代码生成工具,它为开发者提供了自定义模板来快速生成复杂的代码,从而极大地提高了开发效率。这个版本是CodeSmith工具的第五个主要迭代,专注于提升用户体验,增强模板功能...

Global site tag (gtag.js) - Google Analytics