CodeSmith技术原理初探

RK3588s Camera ISP调优详解(一)ISP调试工具及环境配置(附下载途径) 本文主要介绍了rkisp tuner工具的连接与使用,并附上了工具及依赖库的下载地址 阅读详情

CodeSmith技术原理初探.



初次听说CodeSmith是在一篇叫做<每个开发人员现在应该下载的十种必备工具>的文章,起初CodeSmith给我的印象不是吸引人.也是在去年的某一段相对比较空闲的时候,抽空尝试了一下CodeSmith,才发现CodeSmith确实是一个好东西.使用过CodeSmith之后,才发现它的实现原理其实不是很复杂,它从Asp.Net的语法中借鉴了不少,应该说CodeSmith实现了Asp.net一部分功能(从aspx模板生成html脚本)的伪Asp.net,只是CodeSmith额外提供了属性申明的功能.以下是对CodeSmith实现原理的简略概述:
1/  支持执行代码块语法  ,与 Asp.net语法一模一样
2/  支持内联表达式语法  ,与 Asp.net语法一模一样
3/  支持Code Behind功能(,与 Asp.net的()类似
4/  支持 函数代码块功能,  与Asp.net的函数代码块功能 类似
5/ 支持属性申明,用于配置模板的属性.  Asp.net语法不支持.

关于CodeSmith如何通过模板生成代码的问题, 我们只要了解一下Asp.net如何通过Aspx文件生成Html脚本的过程就可以明了.其实Asp.net生成Html脚本过程远比CodeSmith复杂的多,因为Asp.net还要呈现ServerControl的Html脚本.而CodeSmith只专注于 "执行代码块"  "内联表达式"  " 函数代码块"的文法分析及转换.  该文法分析的逻辑也相对简单(和Asp.net一模一样),具体过程如下:
1/  产生一个类Class1(以模板文件名作为类名),默认从CodeTemplate类继承,如果有Code Behind,那么就从Code Behind标记的父类继承(该父类必须从CodeTemplate类继承)
2/  根据所申明的属性,在Class1中添加相应的属性申明及成员变量代码
3/  把模板文件中的 函数代码块中的函数体 原封不动的拷贝到Class1中,作为Class1的成员函数
4/  开始生成Class1的核心函数体:__RenderMethod1(System.IO.TextWriter writer, CodeSmith.Engine.Control control),按顺序把模板文件中的执行代码块中的代码块(不包括字符'')原封不动的移植到__RenderMethod1中,把模板文件中不属于执行代码块 及内联表达式的Code转换成writer.Write("Code");把模板文件中的内联表达式的表达式expression转换成writer.Write(expression).
5/  编译所生成的类Class1
6/  调用类Class1的__RenderMethod1函数,产生实际代码(就好像Asp.net中,Asp.net的运行框架对于每个Request,都产生Html脚本).

通过以上分析,大家就觉得CodeSmith的实现原理相对比较简单,和Asp.net的产生Html脚本的原理基本一致(大家可以比较一下CodeSmith产生的Compiled Source和Asp.net的Page Compilation Source).  到此位置, 就有人会想,如果没有CodeSmith,可否通过Asp.net代替CodeSmith来使用?当然答案是完全肯定的.只是CodeSmith带给我们比较多的便利(比如访问DBSchema功能函数,属性值设置等等,直接编译并生成Code),而使用Asp.net作为代码生成器相对比较复杂(起码要创建一个Web虚拟目录,设计一个Aspx模板文件,用IE请求获得asp.net生成的HTML脚本)并且还要添加一些类似CodeSmith扩展功能,工作量也是不小的,有兴趣的朋友可以尝试一下.

另外补充说明一下在CodeSmith2.6版本中, 编译错误的错误代码行数是指Compiled Source的行数,而不是指原来的模板文件中的行数, 在CodeSmith 3.0中已经是指向原来的模板文件中的行数(这点已经和Asp.net的Page Compilation Source一模一样了, 通过预处理命令:#line实现的  )

一些好的CodeSmith的模板文件可以从http://www.ericjsmith.net/codesmith/forum/default.aspx?f=16&p=1&ord=vd下载...

 

共享自动生成DTO/DataAccess/BizObject的CodeSmith模板
如果你有什么代码模板,可以与我们共享吗,我打算搞一个CodeSmith模板共享的团队,共享我们的模板(CodeSmith论坛上已经有很多了)。
只要你点击一下按钮,DTO对象及其集合类、数据访问类、业务层类的部分代码自动生成,形成Model、DataAccess、Biz三个目录,并生成相应的各个类文件。
MyTemplates.rar

前提:
1、建立数据库的各个表,最好以复数形式给表命名。
2、设定表的主键。
3、设定表的外键。
4、建立表的索引。

主要特点:
1、支持一对多和多对一关系。
2、支持like查询。

用法:
1、完成"前提"中提到的各步。
2、用AllStoredProcedures.cst生成所有存储过程
3、用Model/Bulk.cst生成所有文件

不足:
1、刚建立,还没来的及详细测试。
2、模板里的ModelObject.cst还没有用
3、BizObject.cst还没有发布。
(里面虽然有制作自己的EnterpriseLibrary应用程序块的模板但没有内容,过段时间在给出)


大家有什么好的架构,我可以帮着建立模板,同时希望对我建立的这个模板提出更多的意见。

 
 
 

用SOEM库搞定汇川SV660N伺服电机:一个Linux C程序员的EtherCAT实战笔记 本文详细介绍了如何在Linux系统下使用SOEM库驱动汇川SV660N伺服电机,包括环境搭建、EtherCAT从站设备识别、PDO映射配置、状态机切换与运动控制等关键步骤。通过实战代码示例和常见问题排查指南,帮助开发者快速掌握工业自动化中的EtherCAT通信技术,实现对伺服电机的精准控制。 阅读详情

相关推荐

ctf——writeup

ctf线上赛——第三关地址:http://106.75.86.18:2222提示:ip spoofing——ip伪造首先访问目标地址,一个正常的网页,挺文艺的。上面有些提示。根据上面的提示,我们浏览网页。找了好久,终于找到你。这个跳转链接。(在这个页面下方)我们接着点击这个链接,就跳转到administrator.php这个页面了。看到这个登录页面,就要知道用户名,密码,可是没有怎么办。一开始也试

Child_by_dream的博客 1320

[SPLEB]CodeSmith原理剖析(1)

本文介绍了在SPLEB(http://yuandong.cnblogs.com/archive/2006/02/01/324647.html)开发过程中,对CodeSmith中API调用的一些研究,分析代码生成的技术。最终可以在我们自己的程序中调用CodeSmith的API作为代码生成的基础。本文假设读者已经可以熟练的使用CodeSmith编写模板...

weixin_33896069的博客 171

从MC到DC:三维重建算法的核心原理与实战对比

本文深入对比了三维重建领域两大经典算法Marching Cubes(MC)与Dual Contouring(DC)的核心原理与实战表现。MC算法原理直观、实现简单,但存在特征丢失和二义性问题;DC算法通过求解二次误差函数(QEF)和利用法向量信息,能更好地保留模型的尖锐特征,但计算更复杂。文章结合医学影像处理实例,为开发者根据速度、精度和特征保真度需求选择合适算法提供了清晰指南。

weixin_29251131的博客 1032

黄聪:如何使用CodeSmith批量生成代码(原创系列教程)

在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做一个简单的Demo,并不详细的讲解CodeSmith各个强大的功能,有兴趣的朋友可以打开CodeSmith的帮助文档了解.我只做个抛砖引玉,希望能激起大家更多思想的火花~ 先看看CodeSmith...

weixin_34244102的博客 343

Vue3 + EventSource 实战:手把手教你打造实时AI聊天悬浮窗(附完整代码)

本文详细介绍了如何使用Vue3和EventSource技术构建一个实时AI聊天悬浮窗。文章从产品化视角出发,重点讲解了流式数据接收与渲染、悬浮窗UI交互的工程化实现、性能优化及高级功能,并提供了完整的代码示例,帮助开发者快速集成功能完整的AI问答系统。

assembly8low的博客 843

运算放大器噪声分析实战:从理论到TINA-TI仿真的完整指南

本文深入探讨运算放大器噪声分析的完整流程,从基础理论到TINA-TI仿真实践。详细解析噪声来源、运放噪声模型建立、手工计算方法,并结合TI工具进行高效仿真验证,提供低噪声电路设计优化策略,帮助工程师提升精密电子系统性能。

Jerry的专栏 947

【天线】史密斯(Smith)圆图的讲解

网站:点击打开链接

weixin_42425594的博客 1万+

Spacedesk保姆级教程:用旧平板给Windows电脑当副屏,从安装到避坑一步到位

本文提供Spacedesk保姆级教程,教你如何将旧平板变成Windows电脑的副屏,从软件安装到网络配置、显示优化及声音交互,一步步避开常见陷阱。通过WiFi实现扩展屏功能,支持4K分辨率和60Hz刷新率,让闲置设备焕发新生。

weixin_42524945的博客 1万+

用好CodeSmith,提高生产力,CodeSmith技术原理初探.

初次听说CodeSmith是在一篇叫做<每个开发人员现在应该下载的十种必备工具>的文章,起初CodeSmith给我的印象不是吸引人.也是在去年的某一段相对比较空闲的时候,抽空尝试了一下CodeSmith,才发现CodeSmith确实是一个好东西.使用过CodeSmith之后,才发现它的实现原理其实不是很复杂,它从Asp.Net的语法中借鉴了不少,应该说CodeSmith实现了Asp.n...

weixin_33928467的博客 158

RagFlow 文档解析

RAGFlow 的设计哲学是“高质量输入,高质量输出”,它通过提供可解释性和可控性的生成结果,让用户能够信任并依赖于系统提供的答案。

weixin_43008312的博客 3999

【100%通过率】华为od 机试真题 C语言 实现【补种未成活胡杨】

近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。一个月后,有M棵胡杨未能成活。现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树?

MISAYAONE的博客 1653

CodeSmith基础教程

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

sjsm2007的专栏 2166

Oracle EBS(R12+)通过Multi-Org 多组织架构、Multi-Ledger 多账簿、SLA 子分类账会计、多币种引擎、多会计政策并行五大核心能力,为跨国企业提供一体化、自动化、合规的

Oracle EBS(R12+)提供全球会计核算解决方案,通过Multi-Org多组织架构实现跨国集团数据隔离与共享,支持四层组织结构(业务组→法律实体→经营单位→库存组织)。Multi-Ledger多账簿功能允许一笔业务多准则自动核算,包含主账簿、辅助账簿和报告币种。系统内置多币种处理引擎,覆盖全流程货币业务,支持自动重估、再计量和折算。通过SLA子分类账会计实现多会计政策并行处理,满足不同国家会计准则和税制要求。该方案可同时支持本地法定、集团合并及管理分析需求,实现全球财务数据集中管理,提升合规性和运营

金牌架构师 553

CodeSmith使用

 一、            工具设置CodeSmith默认是不支持中文的,那么我们必须要先设置使其支持中文显示,保存。并且要能够在生成文件中支持中文。[Tools->Options...->Studio->Editor->Enable unicode]将这个选项勾上,那么CodeSmith就可以显示和保存中文了。 在你的模板的最前面的一句话,C#为例: 中加入Re

4601

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

codesmith连接postgresql修复bug

转:CodeSmith7代码生成器针对PostgreSQL数据库无法使用的Bug修复全过程 我自己又修改过,完整的PostgreSQLSchemaProvider.cs文件如下 1 using Npgsql; 2 using NpgsqlTypes; 3 using System; 4 using System.Collections.Generic; ...

diaguo7961的博客 449

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

CodeSmith 连接 MySql 数据库

第一步:下载MySql.Data.dl 下载地址:http://ftp.ntu.edu.tw/pub/MySQL/Downloads/Connector-Net/mysql-connector-net-5.0.7-noinstall.zip

剑胆琴心-.Net 学习笔记 7110

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

codeSmith的使用教程

       CodeSmith基础教程〇、            前言花费了一天的时间学习并写了一个CodeSmith可以使用的模板。在此记录下CodeSmith的学习笔记。希望对同学们有帮助。所用工具: CodeSmith Professional v5.1.3.8510,代码示例全部是以C#为例。一、            工具设置CodeSmith默认是不支持中文的,那

w5224108070的专栏 2133

codesmith

CodeSmith                    (1)时间就是金钱,效率就是生命,开发一个系统本来需要两个月的时间,你如果用了6个月,那就是让公司支出三倍的工资给你,本来你应该一个月拿6000块钱,那么相反,你一个月只能拿到2000,或者企业亏损,一个企业就会倒闭。(2)使用CodeSmith可以生成松耦合的三层,中间使用存储过程,使程序性能有显著的提高。(3)处理数据库表信息部分字段null的问题,避免在程序运行中产生异常。(4)使用SqlHelper解决一个大项目同时连接Oracle和Sqls

jiadong_zhao的专栏 315

CodeSmith for MySQL template

对于.NET平台上的代码生成器来说,codesmith是一个非常好的选择。 以前在学院实验室用的都是SQL server数据库,老师给的一套codesmith模板用来生成model/DAL/BLL很是方便。 不过后来放弃SQL server 投入MySQL之后,刚开始都是手写SQL,还是很痛苦的。 再后来又去找MySQL codesmith模板,这个对应的资料就不多了。不过最后还

编程技术靠北 2057

CodeSmith——欢迎来到CodeSmith

Technorati 标签: CodeSmith,教程    CodeSmith是一个基于模板的代码生成工具,他能为任何基于文本的编程语言生成代码。不论是C#, Visual Basic .NET, T-SQL, Java 还是FORTRAN, CodeSmith能帮助你在短时间内生成高质量的代码。CodeSmith通晓基于ASP.NET的模板,可以帮助你在数分钟内完成模板的安装包。先

小武的专栏 2172

CodeSmith

CodeSmith激活教程【适用任意版本】

一杯浊酒笑风尘 530

CodeSmith 使用教程: 总结

前面基本介绍了CodeSmith的基本用法和编写代码模板的基本方法,这只是CodeSmith功能的一部分,其它部分可以参考CodeSmith文档和类文件定义。此外可以参考CodeSmith附带的示例模板。为便于查询,列出所有文档如下:CodeSmith 使用教程(1): 概述CodeSmith 使用教程(2): 编写第一个代码模板CodeSmith 使用教程(3): 自动生成Yii Framewo

引路蜂移动软件 4821

CodeSmith使用方法

1、按Ctrl+Shift+D调出Schema Explorer,设置数据源 2、编写CodeSmith模版 3、点击Build进行调试       例:实体类模板 -------------------------------%> table" Type="SchemaExplorer.TableSchema" Optional="True" Category="C

剑胆琴心-.Net 学习笔记 3192

CodeSmith 乱码之解决

这几天弄了个小的私活,用asp做.恰巧这阵子在研究codeSmith,就用它生成吧不料 codeSmih 生成的asp文件,浏览起来总是中文乱麻,除非吧浏览器编码调成 Uncode 的才可以花了n小时上cs论坛研究无过.最后发现cs生成的文件默认为 utf-8 编码的我的asp文件要求用gb2312,所以产生了乱码又经过N次试验后,问题得以解决List.cst 生成页面的模板Batch.cst 调

哈哈 专栏 1641

codesmith for java_codesmith 入门介绍【转载】

〇、 前言最近两天自己写了个简单的ORM框架,非常的Easy,但是没有相应的代码生成工具,于是就很杯具了!于是乎,花费了一天的时间学习并写了一个CodeSmith可以使用的模板。在此记录下CodeSmith的学习笔记。所用工具: CodeSmith Professional v5.1.3.8510,代码示例全部是以C#为例。一、 工具设置CodeSmit...

weixin_42354992的博客 434

CodeSmith小尝试

今天看到传智播客Asp.Net高手之路视频教程,发现里面有空CodeSmith能够批量辅助生成有关数据库的代码,如实也写了一下,效果还不错。 1.先来个将数据库中的表批量生成类的代码。 -- Name: Author:WLin Description: --%> @ CodeTemplate Language="C#" TargetLanguage="c#" LinePragmas=

wl05031的专栏 687
上一篇: CodeSmith的模版中的语法
下一篇: JS写的cookie类
SmartJavaer
博客等级 码龄21年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值